3

SQL でテーブル table からいくつかの行を削除しようとしています。問題は、そのテーブルに主キーがないため、サブクエリの結果を使用してそのテーブルから削除する方法がわからないことです。テーブルの構造は次のとおりです。

Friend ( ID1, ID2 )

の生徒ID1は の生徒と友達ID2です。友情は相互的なものなので、(123, 456)が Friend テーブルにあれば、 もそうです(456, 123)

Likes ( ID1, ID2 )

の生徒は の生徒がID1好きID2です。誰かを好きになることは必ずしも相互的であるとは限らないため(123, 456)、好きな人がテーブルにいる場合、それ(456, 123)も存在するという保証はありません.

(No primary key)

私が解決しようとしている状況は次のとおりです。

「2 人の生徒 A と B が友達で、A が B を好きで、その逆ではない場合、Likes タプルを削除します。」

前もって感謝します。

4

5 に答える 5

0

この質問に対する答えを考えてみました。私の小さなテストデータでは機能しますが、より大きなデータでは効率が悪い可能性があるかどうか、またはより良いソリューションでどのように改善できるかを指摘してください.

Delete from Likes where
ID1 in (select Q.ID1
from (select x.ID1, x.ID2
from (select A.ID1,A.ID2,B.ID2 as se
from Likes A left join Likes B
on A.ID2=B.ID1) x where x.ID1 <> x.se or x.se is null) Q inner join Friend F
where Q.ID1 = F.ID1 and Q.ID2 = F.ID2 order by Q.ID1)

and ID2 in  (select Q.ID2
from (select x.ID1, x.ID2
from (select A.ID1,A.ID2,B.ID2 as se
from Likes A left join Likes B
on A.ID2=B.ID1) x where x.ID1 <> x.se or x.se is null) Q inner join Friend F
where Q.ID1 = F.ID1 and Q.ID2 = F.ID2 order by Q.ID1)
于 2013-08-23T15:53:49.480 に答える