我有下表:
Table1 --------------------------Table2
ID Name Table1_id Name
1 Data One 1 a
2 Data Two 1 b
3 Data Three 1 c
2 a
2 c
3 a
3 b
3 c
我将作为参数值a
和b
发送。我需要得到结果Data one
和Data three
请仔细查看table2
,因为id
2
没有a
和b
。 a
和b
仅具有id
1
和2
。
我需要这个结果与众不同。
答案 0 :(得分:1)
这是解决此问题的一种方法:
SELECT *
FROM table1
WHERE id IN
(
SELECT id
FROM table2
WHERE name in ('a','b')
GROUP BY id
HAVING count(DISTINCT name) = 2
)
该子查询将仅返回id
,其中同时存在a
和b
的{{1}}记录。
答案 1 :(得分:1)
SELECT DISTINCT
t1.Name
FROM Table1 t1
INNER JOIN Table2 t2v1 ON t2v1.Table1_id=t1.id
AND t2v1.name='a'
INNER JOIN Table2 t2v2 ON t2v2.Table1_id=t1.id
AND t2v1.name='b'
答案 2 :(得分:0)
我建议使用exists
:
selet t1.*
from table1 t1
where exists (select 1 from table2 t2 where t2.table1_id = t1.id and t2.name = 'a') and
exists (select 1 from table2 t2 where t2.table1_id = t1.id and t2.name = 'b');
当只涉及一个表时,我非常喜欢使用group by
和having
。在这种情况下,exists
通常更好。特别是,它可以利用table(table1_id, name)
上的索引,因此它应该非常快。
具有join
和select distinct
的版本可能存在性能问题。