2

次のようなデータベースがあります。

Student (ID, Name, Grade)
Likes (ID1, ID2)

Where ID1 and ID2 in last table are foreign key referenced student(ID)

注: 好みは相互関係ではありません。たとえば、(123, 456) が Likes テーブルにある場合、(456,123) も Likes テーブルにある必要はありません。

次のステートメントのクエリを作成する必要があります。

これまでのところ、ID1 と ID2 が相互に好きなデータを与えました。

SELECT s1.ID, s1.name, s2.ID, s2.name 
FROM student s1, student s2, likes l
WHERE s1.ID = l.ID1 AND s2.ID = l.ID2 
AND l.ID1 IN (SELECT ID2 FROM likes) 
AND l.ID2 IN (SELECT ID1 FROM likes);

ペアの重複を避ける方法を教えてください。

データベースは: (誰かがそれを必要とする場合)

INSERT INTO `student` VALUES (1025,'John',12),(1101,'Haley',10),(1247,'Alexis',11),(1304,'Jordan',12),(1316,'Austin',11),(1381,'Tiffany',9),(1468,'Kris',10),(1501,'Jessica',11),(1510,'Jordan',9),(1641,'Brittany',10),(1661,'Logan',12),(1689,'Gabriel',9),(1709,'Cassandra',9),(1782,'Andrew',10),(1911,'Gabriel',11),(1934,'Kyle',12);
INSERT INTO `likes` VALUES (1689,1709),(1709,1689),(1782,1709),(1911,1247),(1247,1468),(1641,1468),(1316,1304),(1501,1934),(1934,1501),(1025,1101);

入力されたデータによると:

私が得るデータ

1689    Gabriel     1709    Cassandra
1709    Cassandra   1689    Gabriel
1501    Jessica     1934    Kyle
1934    Kyle        1501    Jessica

理想的なデータ

1689    Gabriel     1709    Cassandra
1501    Jessica     1934    Kyle
4

2 に答える 2

0

問題は「ペアの重複を回避する方法」であるため:

2 つのテーブルを結合して、両方が互いに気に入ったテーブルを取得すると、ペアごとに 2 つの行が取得されます。

いくつかの異なる値と比較することで、1 つを破棄できます。ID は有力な候補です。

select * -- put fields here
from likes li 
join likes li2 on li2.ID1 = li.ID2 and li2.ID2 = li.ID1
-- join 2 students here
where li.ID1 < li.ID2
于 2012-12-21T11:38:52.803 に答える
0

以下のクエリを試してください:

SELECT L1.*
FROM `likes` l1
LEFT JOIN `likes` l2 ON l1.id1 = l2.id2 AND l1.id2 = l2.id1
WHERE l2.id2 IS NOT NULL
GROUP BY l1.id1 - l1.id2
HAVING l1.id1 - l1.id2 < 0
于 2012-12-21T11:47:53.687 に答える