查询多个表以查找重复的一对一关系按不同表中的多列分组

问题描述

我有两张桌子

表 1:

id 列A
1 一个
2 两个
3 一个

表2:

table1_id columnB
1 row1
2 row2
3 row1

是否可以通过单个查询从 table1 中获取 id,其中 columnA 中的重复值在 columnB 中也有重复值:

就像在这个例子中一样,table1 中的 id 1 和 3 在 columnA 和 columnB 中都有重复的值

解决方法

SELECT GROUP_CONCAT(table1.id)
FROM table1 
JOIN table2 ON table1.id = table2.table1_id
GROUP BY table1.columnA,table2.columnB
HAVING COUNT(*) > 1
,

如果可以将同一组中的 ID 用作逗号分隔的列,那么您可以使用以下查询(这将确保两个表对于给定的 columnA 或 columnB 值具有相同数量的重复 ID):

架构(MySQL v5.7)

create table table1 (id int,columnA varchar(20));
insert into table1 values(1,'one');                                              
insert into table1 values(2,'two');
insert into table1 values(3,'one');
create table table2 (table1_id int,columnB varchar(20));
insert into table2 values(1,'one');                                              
insert into table2 values(2,'two');
insert into table2 values(3,'one');

查询 #1

select a.ids from
(SELECT GROUP_CONCAT(id) ids
FROM table1 
GROUP BY columnA
HAVING COUNT(*) > 1) a
inner join
(SELECT GROUP_CONCAT(table1_id) table1_ids
FROM table2
GROUP BY columnB
HAVING COUNT(*) > 1) b 
on a.ids=b.table1_ids;
id
1,3

View on DB Fiddle