删除 SQL 中的重复记录
Removing duplicate records in SQL
我有一个 table 与下面相同。
|----------|---------|
| NAME1 | NAME2 |
|----------|---------|
| R1 | R2 |
| R3 | R4 |
| R2 | R1 |
| R1 | R5 |
| R4 | R3 |
|--------------------|
但在这里我需要将元组 (R1, R2) 和 (R2, R1) 视为相同。这意味着元组 (R1, R2) 和 (R2, R1) 中只有一个可以在最后的 table 中。同样,(R4,R3)和(R3,R4)也是一样的。这意味着元组 (R3, R4) 和 (R4, R3) 中只有一个可以在最后 table.
结局table应该是这样的。
|----------|---------|
| NAME1 | NAME2 |
|----------|---------|
| R1 | R2 |
| R3 | R4 |
| R1 | R5 |
|--------------------|
如何使用 SQL 执行此操作?
您可以尝试使用具有现有逻辑的删除:
DELETE
FROM yourTable t1
WHERE EXISTS (SELECT 1 FROM yourTable t2
WHERE t2.Name2 = t1.Name1 AND t2.Name1 = t1.Name2) AND
Name1 > Name2;
这里的方法是删除任何以相反顺序出现的名称的元组。名字在字典序上大于第二个名字也是一个要求。
如果您只想查看您的数据,请使用least/greatest技巧:
SELECT DISTINCT
LEAST(Name1, Name2) AS Name1,
GREATEST(Name1, Name2) AS Name2
FROM yourTable;
我有一个 table 与下面相同。
|----------|---------|
| NAME1 | NAME2 |
|----------|---------|
| R1 | R2 |
| R3 | R4 |
| R2 | R1 |
| R1 | R5 |
| R4 | R3 |
|--------------------|
但在这里我需要将元组 (R1, R2) 和 (R2, R1) 视为相同。这意味着元组 (R1, R2) 和 (R2, R1) 中只有一个可以在最后的 table 中。同样,(R4,R3)和(R3,R4)也是一样的。这意味着元组 (R3, R4) 和 (R4, R3) 中只有一个可以在最后 table.
结局table应该是这样的。
|----------|---------|
| NAME1 | NAME2 |
|----------|---------|
| R1 | R2 |
| R3 | R4 |
| R1 | R5 |
|--------------------|
如何使用 SQL 执行此操作?
您可以尝试使用具有现有逻辑的删除:
DELETE
FROM yourTable t1
WHERE EXISTS (SELECT 1 FROM yourTable t2
WHERE t2.Name2 = t1.Name1 AND t2.Name1 = t1.Name2) AND
Name1 > Name2;
这里的方法是删除任何以相反顺序出现的名称的元组。名字在字典序上大于第二个名字也是一个要求。
如果您只想查看您的数据,请使用least/greatest技巧:
SELECT DISTINCT
LEAST(Name1, Name2) AS Name1,
GREATEST(Name1, Name2) AS Name2
FROM yourTable;