如何查找具有所有其他列值的所有行

问题描述 投票:0回答:3

我有两个这样的表:

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

mysql sql
3个回答
1
投票

执行此操作的一种方法是将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

Demo on dbfiddle


0
投票

不是很优雅的解决方案,但是....

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);

-1
投票

应该进行简单的左联接吗?

select tb1.id, tb2.id, tb2.name
from tb1
Left join tb2 on tb1.id = tb2.id
© www.soinside.com 2019 - 2024. All rights reserved.