我有两个这样的表:
Tb1
------------
col
1
2
3
Tb2
-----------
id name Tb1_col
1 a 1
2 a 2
3 b 1
4 a 3
现在我想从name
中获取所有Tb2
值,这些值具有col
中的所有Tb1
值。对于此示例,我只期望a
。
执行此操作的一种方法是将JOIN
上的Tb1_col
Tb2到Tb1,并检查给定name
的不同值的数目与Tb1
中的行数相同:
SELECT Tb2.name
FROM Tb2
JOIN Tb1 ON Tb1.col = Tb2.Tb1_col
GROUP BY Tb2.name
HAVING COUNT(DISTINCT Tb2.Tb1_col) = (SELECT COUNT(*) FROM Tb1)
输出
a
不是很优雅的解决方案,但是....
SELECT distinct name from Tb2 as t1
WHERE NOT EXISTS (SELECT t2.col, t3.id
FROM Tb1 as t2 LEFT JOIN Tb2 as t3 ON t3.Tb1_col = t2.col
AND t3.name = t1.name
WHERE t3.id IS NULL);
应该进行简单的左联接吗?
select tb1.id, tb2.id, tb2.name
from tb1
Left join tb2 on tb1.id = tb2.id