【问题标题】:Query multiple tables to find duplicate one to one relation (group by multiple column from diffeerent tables)查询多个表以查找重复的一对一关系(按来自不同表的多列分组)
【发布时间】:2021-03-11 05:24:21
【问题描述】:

我有两张桌子

表1:

id columnA
1 one
2 two
3 one

表2:

table1_id columnB
1 row1
2 row2
3 row1

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

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

【问题讨论】:

  • 是的对不起错字。

标签: mysql sql group-concat composite-primary-key


【解决方案1】:
SELECT GROUP_CONCAT(table1.id)
FROM table1 
JOIN table2 ON table1.id = table2.table1_id
GROUP BY table1.columnA, table2.columnB
HAVING COUNT(*) > 1

【讨论】:

    【解决方案2】:

    如果可以将同一组中的 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;
    
    ids
    1,3

    View on DB Fiddle

    【讨论】:

    • 谢谢。这实际上将帮助我处理更复杂的查询。已经接受了 Akina 的回答,但这也很有帮助。
    • 没有问题。这样更有效率。如果每张桌子的重复项目数量对您来说并不重要,那将是更好的答案。如果表 1 有三行(1,3,4),表 2 有两行行 1(1,3),而您想要的输出是(1,3),那么 Akira 的答案是正确的。最美好的祝愿
    • @Akina 这就是我在回答和 cmets 中解释的内容。如果两个表都具有相同的一组重复 ID,我的答案只会生成答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多