,这很容易使您的查询工作,为所有列,假设无有NULL
值:
SELECT t.*
FROM `table` t
WHERE (`column_1`, `column_2`, `column_3`) IN (
SELECT `column_1`, `column_2`, `column_3`
FROM `table` t2
GROUP BY `column_1`, `column_2`, `column_3`
HAVING COUNT(id) > 1
);
如果你有NULL
值,那么你要NULL
安全比较:
SELECT t.*
FROM `table` t JOIN
(SELECT `column_1`, `column_2`, `column_3`
FROM `table` t2
GROUP BY `column_1`, `column_2`, `column_3`
HAVING COUNT(id) > 1
) tt
ON (NOT tt.column_1 <=> t.column_1) AND
(NOT tt.column_2 <=> t.column_2) AND
(NOT tt.column_3 <=> t.column_3);
当然,这远离简单的目标。
为什么你需要看到每个重复是好奇。为什么不这样做:
SELECT `column_1`, `column_2`, `column_3`, COUNT(*)
FROM `table` t2
GROUP BY `column_1`, `column_2`, `column_3`
HAVING COUNT(id) > 1
尽管在这两种情况下,您都需要列出所有列(至少一次)。否则,我认为在MySQL中没有办法做到这一点。有些数据库允许您为整行创建一个JSON对象或XML对象 - 使其成为可能而不列出所有列。我想不出任何类似于MySQL的东西。
在MySQL中,我认为你必须列出所有的列。 –