これは私のSQLの問題です-3つのテーブルがあります:
名前リストListHasNames Id Name Id Desc ListsId NamesId = -------- ------------ ---------------- 1ポール1サッカー11 2ジョー2バスケットボール12 3ジェニー3ピンポン21 4ティナ4朝食クラブ23 5ミッドナイトクラブ32 3 3 4 1 4 2 4 3 5 1 5 2 5 3 5 4
つまり、ポール(Id = 1)とジョー(Id = 2)はサッカーチーム(Lists.Id = 1)に、ポールとジェニーはバスケットボールチームに所属しています...
ここで、特定の名前の組み合わせのLists.Idを返すSQLステートメントが必要です。Paul、Joe、およびJennyがそのリストの唯一のメンバーであるリストはどれですか。Lists.Id = 4(Breakfast Club)のみに回答しますが、Tinaもそのリストに含まれているため、5(Midnight Club)には回答しません。
内部結合とサブクエリで試してみました。
SELECT Q1.Lists_id FROM (( SELECT Lists_Id FROM T1として名前を付けます listhasnames as T2 どこ (T1.Name ='Paul')および (T1.Id = T2.Names_ID)および ((( SELECT count(*)FROM listhasnames as Z1 ここで(Z1.lists_id = T2.lists_Id) )= 3) )AS Q1 インナージョイン( SELECT Lists_Id FROM T1として名前を付けます listhasnames as T2 どこ (T1.Name ='Joe')および (T1.Id = T2.Names_ID)および (( (SELECT count(*)FROM listhasnames as Z1 WHERE(Z1.Lists_id = T2.lists_id) )= 3) )AS Q2 オン(Q1.Lists_id = Q2.Lists_id) インナージョイン( SELECT Lists_Id FROM T1として名前を付けます listhasnames as T2 どこ (T1.Name ='Jenny')および (T1.Id = T2.Names_ID)および (( (SELECT count(*)FROM listhasnames as Z1 WHERE(Z1.Lists_id = T2.lists_id) )= 3) )AS Q3 オン(Q1.Lists_id = Q3.Lists_id)
少し複雑に見えますね それを最適化する方法は?特定の名前が含まれているLists.Idのみが必要です(これらの名前のみが必要で、他には誰もいません)。たぶんSELECTINで?
よろしく、デニス