这是我的 sql 问题 - 有 3 个表:
名称列表 ListHasNames
Id 名称 Id 描述 ListsId NamesId
=-------- ------------ ----------------
1 保罗 1 足球 1 1
2 乔 2 篮球 1 2
3 珍妮 3 乒乓球 2 1
4 蒂娜 4 早餐俱乐部 2 3
5 午夜俱乐部 3 2
3 3
4 1
4 2
4 3
5 1
5 2
5 3
5 4
这意味着 Paul (Id=1) 和 Joe (Id=2) 在足球队 (Lists.Id=1),Paul 和 Jenny 在篮球队,等等...
现在我需要一个返回特定名称组合的 Lists.Id 的 SQL 语句:在哪些列表中 Paul、Joe 和 Jenny 是该列表的唯一成员?只回答 Lists.Id=4(早餐俱乐部) - 但不回答 5(午夜俱乐部),因为 Tina 也在该列表中。
我已经尝试过使用 INNER JOINS 和 SUB QUERIES:
选择 Q1.Lists_id FROM
(
选择 Lists_Id FROM
名称为 T1,
列表名称为 T2
在哪里
(T1.Name='Paul') 和
(T1.Id=T2.Names_ID) 和
( (
选择计数(*)从
列表名称为 Z1
其中(Z1.lists_id = T2.lists_Id)
) = 3)
) 作为第一季度
内部联接 (
选择 Lists_Id FROM
名称为 T1,
列表名称为 T2
在哪里
(T1.Name='Joe') 和
(T1.Id=T2.Names_ID) 和
(
(选择计数(*)来自
列表名称为 Z1
哪里(Z1.Lists_id = T2.lists_id)
) = 3)
) 作为第二季度
开(Q1.Lists_id=Q2.Lists_id)
内部联接 (
选择 Lists_Id FROM
名称为 T1,
列表名称为 T2
在哪里
(T1.Name='Jenny') 和
(T1.Id=T2.Names_ID) 和
(
(选择计数(*)来自
列表名称为 Z1
哪里(Z1.Lists_id = T2.lists_id)
) = 3)
) 作为第三季度
开(Q1.Lists_id=Q3.Lists_id)
看起来有点复杂,嗯?如何优化它?我只需要包含特定名称的 Lists.Id(并且只有这些名称,没有其他人)。也许选择输入?
问候,丹尼斯