这是我的桌子
+-------+--------+--------+--------+----+
| 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 |
+------+--------+--------+--------+----+
它不选择具有空值的行,因为比较两个空值将导致空值。但我希望将具有空值的行包含在我的结果中。 如何为它编写查询?
答案 0 :(得分:0)
我不打算发布答案,因为我的解决方案不好。但由于您的其他答案为零,因此我会尽力提供帮助。如果表不是很大,则可以创建另一个表。设置NULL列=表中不存在任何其他值。
SELECT value1,IF(value1 IS NULL, '1',value1) AS value_convert FROM `table` GROUP BY
value1;
然后在此表上运行查询。