cww*_*cww 5 mysql duplication group-by
+----+--------------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+--------------+-----+-----------+----------+
| 1 | Ramesh Olive | 32 | Ahmedabad | 2000.00 |
| 2 | Tan Kau | 25 | Delhi | 1500.00 |
| 3 | Jason Tan Kau| 25 | Delhi | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Hardik Jass | 27 | Bhopal | 4500.00 |
| 7 | Muffy John | 24 | Indore | 10000.00 |
| 8 | Muffy Lee | 24 | Indore | 10000.00 |
+----+--------------+-----+-----------+----------+
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,假设表名是“table_a”,1)“Tan Kau”与“Jason Tan Kau”重复,2)“Hardik”与“Hardik Jass”重复
如何编写将产生如下输出的 SQL?
我认为这会奏效,但应该很慢。有什么想法可以改进吗?
Select A.*, IF(B.ID IS NULL, "", "DUP") as DUP
FROM table_a A
LEFT JOIN table_a B
ON A.NAME LIKE CONCATE("%", B.NAME, "%") AND A.ID != B.ID
+----+--------------+-----+-----------+----------+-----+
| ID | NAME | AGE | ADDRESS | SALARY | DUP |
+----+--------------+-----+-----------+----------+-----+
| 1 | Ramesh Olive | 32 | Ahmedabad | 2000.00 | |
| 2 | Tan Kau | 25 | Delhi | 1500.00 | Dup |
| 3 | Jason Tan Kau| 25 | Delhi | 2000.00 | Dup |
| 4 | Chaitali | 25 | Mumbai | 6500.00 | |
| 5 | Hardik | 27 | Bhopal | 8500.00 | Dup |
| 6 | Hardik Jass | 27 | Bhopal | 4500.00 | Dup |
| 7 | Muffy John | 24 | Indore | 10000.00 | |
| 8 | Muffy Lee | 24 | Indore | 10000.00 | |
+----+--------------+-----+-----------+----------+-----+
Run Code Online (Sandbox Code Playgroud)
您的查询可以通过添加相反条件返回预期结果:
SELECT A.*, IF(B.ID IS NULL, "", "DUP") as DUP
FROM persons A
LEFT JOIN persons B
ON a.ID <> b.ID
AND (a.Name LIKE CONCAT ("%", b.Name, "%") OR b.Name LIKE CONCAT ("%", a.Name, "%"))
ORDER BY ID;
Run Code Online (Sandbox Code Playgroud)
我不知道它是否会更快,但另一种方法是使用 INSTR:
SELECT A.*, IF(B.ID IS NULL, "", "DUP") as DUP
FROM persons A
LEFT JOIN persons B
ON a.ID <> b.ID
AND (Instr(a.Name, b.Name) > 0 OR Instr(b.Name, a.Name) > 0)
ORDER BY ID;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1681 次 |
| 最近记录: |