我需要一个查询来查找错误条目的所有组合

时间:2013-08-02 08:44:37

标签: mysql sql

我有一张这样的表

 ID     FK   PREFERENCE
 78     54        1
 79     54        2
 80     54        3
 87     53        1
 88     53        2
 89     53        2 
 90     56        1
 91     56        2
 92     57        1
 93     58        1

对于一个FK,最大可能的首选项为3,精确值为1,2和3.对于单个FK,我们可以有一个1,一个2和一个3我们可以在此表中看到对于FK 53,首选项是1,2和2,这是错误的条目。 我需要一个查询来查找错误条目的所有组合

3 个答案:

答案 0 :(得分:2)

<强>已更新

SELECT t.*
  FROM Table1 t JOIN
(
  SELECT fk, preference
    FROM Table1
   GROUP BY fk, preference
  HAVING COUNT(*) > 1
      OR preference < 1
      OR preference > 3
) q  ON t.fk = q.fk 
    AND t.preference = q.preference

输出:

| ID | FK | PREFERENCE |
------------------------
| 88 | 53 |          2 |
| 89 | 53 |          2 |

这是 SQLFiddle 演示

答案 1 :(得分:0)

以下查询将显示重复的两行

SELECT *
FROM myTable as a
INNER JOIN myTable as b
ON a.FKS= b.FKS AND a.PREFERENCE= b.PREFERENCE AND a.ID <> b.ID

SQL Fiddle Demo

答案 2 :(得分:0)

您可以尝试:

SELECT * FROM
(
SELECT fk, IF( LENGTH(GROUP_CONCAT( pre ORDER BY pre SEPARATOR '#')) > LENGTH( GROUP_CONCAT( DISTINCT pre ORDER BY pre SEPARATOR '#')), 0, 1 ) AS wrong
FROM test
GROUP BY fk
) AS wrongRow
WHERE wrongRow.wrong = 1;