私はこれらのテーブルを持っています:
高校生 ( ID, 名前, 学年 ) ある学年に固有の ID と名前を持つ高校生がいます。
友達 ( ID1, ID2 ) ID1 の生徒は ID2 の生徒と友達です。友情は相互的なものなので、(123, 456) が Friend テーブルにある場合、(456, 123) もそうです。
いいね ( ID1, ID2 ) ID1 の生徒は ID2 の生徒にいいね!誰かを好きになることは必ずしも相互的なものではないため、(123, 456) が Likes テーブルにある場合、(456, 123) も存在するという保証はありません。
2 人の学生 A と B が友達で、A が B を好きで、その逆ではない場合、Likes タプルを削除したいと思います。
まず、友達である非相互のいいねの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を超える評判が必要なため、投稿できません...
編集:
わかりました。まだ正しい結果が得られていないので、ここにテーブルを配置します。
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 つのタプルを likes テーブルから削除することになっています: 1911-1247 1641-1468
彼らは友達でもある非相互の好きです