これは私の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で?
よろしく、デニス