从mysql中的表中选择具有重复项的行(行包含空值)

时间:2018-06-21 07:34:55

标签: mysql

这是我的桌子

+-------+--------+--------+--------+----+
| name  | value1 | value2 | value3 | id |
+-------+--------+--------+--------+----+
| Alice | p      | y      | r      | 1  |
| Ted   | g      | b      | t      | 10 |
| Bob   | g      | NULL   | x      | 2  |
| Jack  | NULL   | NULL   | x      | 3  |
| Joe   | g      | NULL   | x      | 4  |
| John  | g      | NULL   | x      | 5  |
| Maria | a      | b      | c      | 6  |
| Mark  | g      | b      | t      | 7  |
| Mary  | t      | j      | NULL   | 8  |
| Sam   | NULL   | NULL   | x      | 9  |
+-------+--------+--------+--------+----+

我想选择具有重复值的行。我使用了以下查询:

    SELECT * from my_table 
WHERE (value1, value2, value3) IN 
(SELECT value1, value2, value3 
   FROM my_table 
   GROUP BY value1, value2, value3 
   HAVING COUNT(*) > 1) 
ORDER BY value1, value2, value3;

我的查询结果是这样:

+------+--------+--------+--------+----+
| name | value1 | value2 | value3 | id |
+------+--------+--------+--------+----+
| Ted  | g      | b      | t      | 10 |
| Mark | g      | b      | t      | 7  |
+------+--------+--------+--------+----+

它不选择具有空值的行,因为比较两个空值将导致空值。但我希望将具有空值的行包含在我的结果中。 如何为它编写查询?

1 个答案:

答案 0 :(得分:0)

我不打算发布答案,因为我的解决方案不好。但由于您的其他答案为零,因此我会尽力提供帮助。如果表不是很大,则可以创建另一个表。设置NULL列=表中不存在任何其他值。

SELECT value1,IF(value1 IS NULL, '1',value1) AS value_convert FROM `table` GROUP BY 
value1;

然后在此表上运行查询。