1

我有 mysql 产品表。其中有id,name,sku,program,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

样本数据:

编号 | 姓名 | 货号 | 程序 | 购买网址
 1 | 亲1 | 123 | 肯德基 | 肯德基
 2 | 亲2 | 123 | 麦当劳 | 麦当劳
 3 | 亲3 | 第456章 麦当劳 | 麦当劳
 4 | 亲4 | 123 | 肯德基 | 肯德基  

所需的输出应该是

编号 | 姓名 | 货号 | 程序 | 购买网址
 1 | 亲1 | 123 | 肯德基 | 肯德基
 2 | 亲2 | 123 | 麦当劳 | 麦当劳

因为有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

输出:

| 身份证 | 姓名 | 货号 | 程序 | 购买网址 |
|----|--------|-----|------------|--------------|
| 1 | 亲1 | 123 | 肯德基 | 肯德基 |
| 2 | 亲2 | 123 | 麦当劳 | 麦当劳网|

这是SQLFiddle演示

于 2013-09-10T00:10:49.620 回答