MySQL中如何匹配另一张表多行数据来筛选多列值?
解决方案:筛选table1中col1和col2均存在于table2.t2的行
根据你的需求,要从table1中选出col1和col2的值都能在table2的t2列匹配到的行,以下是几种可行的SQL实现方式:
方法1:使用EXISTS子查询(推荐,大表场景性能更优)
SELECT t1.* FROM table1 t1 WHERE EXISTS (SELECT 1 FROM table2 t2 WHERE t2.t2 = t1.col1) AND EXISTS (SELECT 1 FROM table2 t2 WHERE t2.t2 = t1.col2);
通过两个独立的EXISTS子查询,分别验证当前行的col1和col2是否存在于table2的t2列中,只有两个条件同时满足时,该行才会被选中。
方法2:使用IN运算符
SELECT * FROM table1 WHERE col1 IN (SELECT t2 FROM table2) AND col2 IN (SELECT t2 FROM table2);
先通过子查询获取table2中所有t2的取值集合,再检查table1的col1和col2是否都属于这个集合,逻辑直观易懂。
方法3:使用JOIN关联查询
SELECT DISTINCT t1.* FROM table1 t1 JOIN table2 t2a ON t1.col1 = t2a.t2 JOIN table2 t2b ON t1.col2 = t2b.t2;
通过两次JOIN操作,分别将table1的col1、col2与table2的t2关联,最后用DISTINCT去除因table2中重复t2值产生的重复结果行。
以上三种方法都能准确筛选出table1中id为1的符合条件的行。
内容的提问来源于stack exchange,提问作者Abhishek Chatterjee
相关产品推荐
相关产品推荐

