通过多参数获取结果

时间:2018-12-04 15:36:14

标签: sql

我有下表:

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

我将作为参数值ab发送。我需要得到结果Data oneData three

请仔细查看table2,因为id 2没有abab仅具有id 12

我需要这个结果与众不同。

3 个答案:

答案 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,其中同时存在ab的{​​{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 byhaving。在这种情况下,exists通常更好。特别是,它可以利用table(table1_id, name)上的索引,因此它应该非常快。

具有joinselect distinct的版本可能存在性能问题。