使用mysql

时间:2015-10-16 16:06:52

标签: mysql

我正在使用mysql。还在学习它。

我的表有一个名为UPC的列,它是char(13)

我发现有些记录存在以下模式:

4009426030
04009426030

拥有上述UPC意味着我有两个相同项目的记录。我需要找到所有相同的记录,以便我可以合并它们。所以我试过

SELECT * 
  FROM products p1 
 WHERE prod_id in (
     SELECT prod_id
       FROM products p2 
      WHERE lpad(p2.upc, 13, '0') = lpad(p1.upc, 13, '0') 
        AND p2.upc != p1.upc 
)

我的想法是,我会找到'4009426030' != '04009426030''0004009426030' == '0004009426030'的记录,因此我不会在同一记录上匹配,只会记录不同的记录。

但我没有结果!有人能看出我做错了吗?

1 个答案:

答案 0 :(得分:1)

试试这个:

SQL Fiddle

MySQL 5.6架构设置

CREATE TABLE products
    (`prod_id` int,`upc` varchar(25))
;

INSERT INTO products
    (`prod_id`, `upc`)
VALUES
    (1, '4009426030'),
    (2, '04009426030')
;

查询1

SELECT * 
FROM products p1 
inner join products p2 on lpad(p2.upc, 13, '0') = lpad(p1.upc, 13, '0') 
        AND p2.upc > p1.upc 

<强> Results

| prod_id |         upc | prod_id |        upc |
|---------|-------------|---------|------------|
|       2 | 04009426030 |       1 | 4009426030 |