我有一个表,我需要一个MYSQL Select语句,所以我可以找到损坏的数据并手动修复它。
样本表
TABLE_A id | type | value1 | value2 1 | 10 | 123 | 987 2 | 10 | 123 | 987 3 | 10 | 123 | 789 4 | 20 | 123 | 987 5 | 20 | 456 | 987 6 | 30 | 123 | null 7 | 30 | 123 | null 8 | 40 | 123 | 987
我需要一个select语句,它将列出记录,如果它们具有相同的“type”且value1不相同且/或value2不相同。
例如
ID 1,2,3 - 因为id2在id 3中不同并且它们具有相同的“type”
将显示ID 4,5,因为value1不同且它们具有相同的“类型”
ID 6,7将不会显示,因为对于相同的“类型”,value1和value2是相同的
ID 8将不会显示,因为只有一个具有此类型。
我一直试图解决这个问题几天,需要一些帮助。感谢
答案 0 :(得分:5)
SELECT a.id as problem_id
FROM TABLE_A as a JOIN TABLE_A as b
ON a.type = b.type
WHERE a.value1 <> b.value1 OR a.value2 <> b.value2
GROUP BY problem_id;
答案 1 :(得分:0)
尝试:
SELECT * FROM TABLE_A WHERE type IN (SELECT type FROM TABLE_A GROUP BY `type`, `value1`, `value2` HAVING count(value1) > 1 OR count(value2) > 1)