,這很容易使您的查詢工作,爲所有列,假設無有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中,我認爲你必須列出所有的列。 –