MYSQL:在关系字段中查找重复项

时间:2017-11-14 13:13:24

标签: mysql

我有一个主表,通过another_table_id字段与另一个表相关。

id  another_table_id
1   1
2   2
3   2

我需要选择所有具有重复项的行(主表的id 2和3)

我尝试了以下查询

select * from main_table
group by another_table_id
having count(*) > 1

但是查询给了我

SELECT列表的表达式#1不在GROUP BY子句中,并且包含非聚合列' main_table.id'它在功能上不依赖于GROUP BY子句中的列;这与sql_mode = only_full_group_by

不兼容

此外,此查询

select * from main_table
group by id, another_table_id
having count(*) > 1

请给我一个空的数据集,有什么建议吗?

2 个答案:

答案 0 :(得分:3)

这是一种方式:

SELECT DISTINCT x.* 
           FROM my_table x 
           JOIN my_table y 
             ON y.another_table_id = x.another_table_id 
            AND y.id <> x.id;

答案 1 :(得分:0)

您可以使用JOIN

SELECT * FROM main_table
JOIN another_table ON another_table.id = main_table.

这将加入数据,无需HAVING子句

但是,如果您希望两组数据都使用UNION,因为这不会加入数据

SELECT * FROM main_table
UNION 
SELECT * FROM another_table
HAVING COUNT(*) > 1

希望这有帮助!