MYSQL在同一个表中选择

时间:2011-07-03 06:24:49

标签: php mysql

我有一个表,我需要一个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将不会显示,因为只有一个具有此类型。

我一直试图解决这个问题几天,需要一些帮助。感谢

2 个答案:

答案 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)