这是我的 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(并且只有这些名称,没有其他人)。也许选择输入?
问候,丹尼斯