麻煩我有這些表:SQL查詢我在與
Highschooler(ID,姓名,年級) 有一個高中學生,唯一的ID,並在一定的等級給定的名字。
朋友(ID1,ID2) ID1的學生是ID2的學生的朋友。友誼是相互的,所以如果(123,456)在朋友表中,那麼(456,123)。
贊(ID1,ID2) ID1的學生喜歡ID2的學生。喜歡某人不一定是相互的,所以如果(123,456)在喜歡錶中,則不能保證(456,123)也存在。
如果兩個學生A和B是朋友,而A喜歡B而不是反之亦然,我想刪除喜歡元組。
要開始,我試圖想起來的2元組非互惠喜歡誰都是朋友,但我沒有成功...
我有這樣的:
SELECT *
FROM Likes
where Likes.ID1 in (
select Likes.ID1
from Likes, Friend
where Likes.ID1=Friend.ID1
and Likes.ID2=Friend.ID2
)
AND NOT IN (
SELECT Likes.ID1
FROM Likes L1, Likes L2, Friend
WHERE L1.ID1=Friend.ID1
AND L2.ID2=Friend.ID2
AND L1.ID1 = L2.ID2
AND L1.ID2 = L2.ID1);
但它不工作..我得到一個錯誤..有人可以幫助我這個!
其實,我與它的值表的圖像,但是,因爲我需要超過10聲譽做,我不能將它張貼...
編輯:
好吧,我「M要去把表中這裏是因爲我仍然沒有得到正確的結果
Highschooler
ID name grade
1510 Jordan 9
1689 Gabriel 9
1381 Tiffany 9
1709 Cassand 9
1101 Haley 10
1782 Andrew 10
1468 Kris 10
1641 Brit 10
1247 Alexis 11
1316 Austin 11
1911 Gabriel 11
1501 Jessica 11
1304 Jordan 12
1025 John 12
1934 Kyle 12
1661 Logan 12
Friend
ID1 ID2
1510 1381
1510 1689
1689 1709
1381 1247
1709 1247
1689 1782
1782 1468
1782 1316
1782 1304
1468 1101
1468 1641
1101 1641
1247 1911
1247 1501
1911 1501
1501 1934
1316 1934
1934 1304
1304 1661
1661 1025
1381 1510
1689 1510
1709 1689
1247 1381
1247 1709
1782 1689
1468 1782
1316 1782
1304 1782
1101 1468
1641 1468
1641 1101
1911 1247
1501 1247
1501 1911
1934 1501
1934 1316
1304 1934
1661 1304
1025 1661
Likes
ID1 ID2
1689 1709
1709 1689
1782 1709
1911 1247
1247 1468
1641 1468
1316 1304
1501 1934
1934 1501
1025 1101
我應該消除到底從喜歡錶中的這些2元組: 1911年至1247年 1641年至1468年
他們是不可逆喜歡誰也朋友
你使用的是mysql還是sqlite? – 2013-02-16 21:20:06
我正在使用sqlite – 2013-02-16 21:25:25
您的意思是,「如果兩個學生A和B是朋友,並且A喜歡B但反之亦然,我想刪除朋友元組。」? – 2013-02-16 21:26:18