-4

我有一张这样的桌子

 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,最大可能的 Preferences 为 3,精确值为 1,2 和 3。对于单个 FK,我们可以有一个 1、一个 2 和一个 3 我们可以在此表中看到 FK 53 的 Preferences 为 1, 2 和 2 哪个是错误的条目。我需要一个查询来查找错误条目的所有组合

4

3 回答 3

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

输出:

| 身份证 | FK | 偏好 |
----------------------
| 88 | 53 | 2 |
| 89 | 53 | 2 |

这是SQLFiddle演示

于 2013-08-02T08:54:37.663 回答
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 小提琴演示

于 2013-08-02T08:50:37.513 回答
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;
于 2013-08-02T09:02:16.680 回答