1

製品のmysqlテーブルがあります。id、name、sku、programme、buyurl などのフィールド名があります。今、sku に基づいて、プログラム名が異なる重複レコードを検索したいと考えています。私は実際に価格比較機能のためにそれをやっています。これは重複レコードを見つけるための私のコードです。これは問題ありませんが、私の問題は同じプログラム名を持っていることであり、異なるために必要です。

SELECT  id, name, products.sku FROM products
INNER JOIN (SELECT sku FROM products
GROUP BY sku HAVING count(sku) > 1) dup ON products.sku= dup.sku

サンプルデータ:

ID | 名前 | スク | プログラム | 購入URL
 1 | プロ1 | 123 | ケンタッキー | kfc.com
 2 | プロ2 | 123 | マクドナルド | mcdonald.com
 3 | プロ3 | 456 | マクドナルド | mcdonald.com
 4 | プロ4 | 123 | ケンタッキー | kfc.com  

必要な出力は

ID | 名前 | スク | プログラム | 購入URL
 1 | プロ1 | 123 | ケンタッキー | kfc.com
 2 | プロ2 | 123 | マクドナルド | mcdonald.com

sku同じものと異なるprogrammeものがあるので。

どんな助けでも大歓迎です。

4

2 に答える 2

3

私があなたを正しく理解していれば、次のクエリが機能します。

SELECT p1.id, p1.name, p1.sku, p1.programme
FROM product p1 JOIN product p2
ON p1.sku = p2.sku AND p1. programme <> p2.programme

そうでない場合は、サンプルデータと期待される結果を追加してください。

サンプル データに基づいて、次のクエリを試してください。

SELECT * FROM product
WHERE id IN(
   SELECT p1.id
   FROM (SELECT MIN(id) as id, sku, programme FROM product GROUP BY sku, programme) p1 
   JOIN (SELECT MIN(id) as id, sku, programme FROM product GROUP BY sku, programme) p2 
   ON p1.sku = p2.sku AND p1.programme <> p2.programme
)
于 2013-09-09T10:16:59.763 に答える
2

あなたが試すことができます

SELECT p.id, name, sku, programme, buyurl
  FROM
(
  SELECT MIN(t1.id) id
    FROM products t1 JOIN products t2
      ON t1.sku = t2.sku 
     AND t1.programme <> t2.programme
   GROUP BY t1.sku, t1.programme
) q JOIN products p
    ON q.id = p.id

出力:

| | ID | 名前 | SKU | プログラム | 購入URL |
|----|------|-----|-----------|--------------|
| | 1 | プロ1 | 123 | ケンタッキー | kfc.com |
| | 2 | プロ2 | 123 | マクドナルド | マクドナルド.com |

これがSQLFiddleのデモです

于 2013-09-10T00:10:49.620 に答える