我有一张这样的表
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,这是错误的条目。 我需要一个查询来查找错误条目的所有组合
答案 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
答案 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;