连接两个表中选择
我有两个表:连接两个表中选择
TABLE 1
ID VALUE
1 ABC
2 DEF
3 GHI
4 JKL
5 XYZ
TABLE 2
ID T1_ID VALUE
1 1 A
2 1 B
3 2 A
4 3 A
5 3 B
6 4 B
我想选择从表1中有一个表2一行值A和B. 所有行这将是行1和3 (不是2,因为它只有A,而不是4,因为它只有B)。 我可以在没有子查询的情况下执行此操作吗?
(注:我还需要对查询值如表1,所以我不能只是查询表2)
Tadaaah!没有子查询。
select distinct
t1.*
from
Table1 t1
inner join Table2 t2a on t2a.t1_ID = t1.ID and t2a.VALUE = 'A'
inner join Table2 t2b on t2b.t1_ID = t1.ID and t2b.VALUE = 'B'
SELECT t1.ID,
t1.VALUE
FROM Table1 t1
JOIN Table2 t2
ON t1.ID = t2.T1_ID
WHERE t2.VALUE IN ('A', 'B')
GROUP BY t1.ID,
t1.VALUE
HAVING COUNT(DISTINCT t2.VALUE) = 2
不同的解决方案。也许OP可以针对我的性能测试你的解决方案。不知道哪个更好。 – GolezTrol
有了好的索引,我会认为'JOIN'会更好。尽管不太容易扩展到任意数量的项目。也有助于了解RDBMS ... –
由于查询的复杂性,第一个答案更容易整合。 –
为什么你需要做它没有一个子查询? – GolezTrol
子查询性能可能很差,因为表2非常庞大。 –
没有子查询,你需要一个连接,这可能同样糟糕。最好的想法是尝试不同的解决方案并检查性能。还取决于数据库。 MySQL对于左连接非常好,而对于子选择和“IN”过滤器则很糟糕,而在Oracle中则相反。你使用哪个数据库? – GolezTrol