-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

1 つの FK の場合、可能な最大設定値は 3 で、正確な値は 1、2、および 3 です。単一の FK の場合、1 つ、2、3 のいずれかを指定できます。この表で、FK 53 の設定値が 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

出力:

| | ID | FK | 好み |
------------------------
| | 88 | 53 | 2 |
| | 89 | 53 | 2 |

これがSQLFiddleのデモです

于 2013-08-02T08:54:37.663 に答える
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 に答える
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 に答える