5
+-------------------------+
| SKU  |  UPC  |   NAME   | INVID
+-------------------------+
| 001  |  111  |   NAME1  |  1
| 001  |  null |   NAME2  |  2
| 0-1  |  111  |   NAME3  |  3
| -01  |  111  |   NAME4  |  4
| 002  |  222  |   NAME5  |  5
| 002  |  null |   NAME6  |  6
| 003  |  333  |   NAME7  |  7
+-------------------------+

このテーブルで重複するレコードを2つの基準で見つけたいと思います。1つ目はSKU、2つ目はUPCです。この場合、重複するレコードは[1,2,3,4]と[5,6]です。sku番号が一致しているため、行[1,2]は重複しています。UPC番号が一致しているため、行[1,3,4]は重複しています。最初の重複グループは次のようになります。

GROUP1 *

+-------------------------+
| 001  |  111  |   NAME1  |  1
| 001  |  null |   NAME2  |  2
| 0-1  |  111  |   NAME3  |  3
| -01  |  111  |   NAME4  |  4
+-------------------------+

2番目の重複グループは次のようになります。

GROUP2 *

+-------------------------+
| 002  |  222  |   NAME5  |  5
| 002  |  null |   NAME6  |  6
+-------------------------+

mysqlクエリでこのグループを見つけるにはどうすればよいですか?重複するレコードが見つかった場合は、テーブル内の重複するレコードのgrouID ***を設定します

これを試しましたが、すべての重複が表示されるわけではありません。

select sku, upc
from inv
WHERE sku is not null 
GROUP BY sku, upc HAVING count(sku)  > 1 OR count(upc)  > 1

これはSQLスキーマです。

http://sqlfiddle.com/#!2/4d760/2

このクエリは空の結果を返します。

4

2 に答える 2

0

必要な処理を実行して同じ列を返すクエリが2つある場合は、UNIONを使用してそれらを1つの結果セットとして表示できます。

ただし、これには重複重複が含まれる場合があります(両方の重複クエリに表示されるレコード)

編集:またはサブクエリを使用する

select * from inv where upc in (select upc from inv group by upc having count(upc) > 1) 
union
select * from inv where sku in (select sku from inv group by sku having count(sku) > 1);

(私は今仕事に戻らなければなりませんが、うまくいけば、これはあなたを解決への道に導くでしょう)

于 2012-10-25T12:18:57.740 に答える
0

重複するエントリを 1 つの結果として表示するクエリを次に示します。

select distinct i1.*
  from inv i1, inv i2
  WHERE i1.sku is not null AND 
    (i1.sku = i2.sku OR i1.upc = i2.upc) AND i1.idinv != i2.idinv
  ORDER BY idinv

これは、テーブルをそれ自体と結合し、明確な一致を探すことで実現されます。

于 2012-10-25T12:29:24.783 に答える