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

Query multiple tables to find duplicate one to one relation (group by multiple column from diffeerent tables)

我有2张桌子

表 1:

id columnA
1 one
2 two
3 one

表 2 :

table1_id columnB
1 row1
2 row2
3 row1

是否可以通过单个查询从表 1 中获取 ID,其中列 A 中的重复值在列 B 中也有重复值:

像这个例子一样,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 作为逗号分隔列,那么您可以使用以下查询(这将确保 table 对于给定的 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;
ids
1,3

View on DB Fiddle