我正在使用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'
的记录,因此我不会在同一记录上匹配,只会记录不同的记录。
但我没有结果!有人能看出我做错了吗?
答案 0 :(得分:1)
试试这个:
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 |