SQL Fiddle
Oracle 11g R2 架构设置:
CREATE TABLE Test ( name, friend ) AS
SELECT 'Apple', 'Flavour' FROM DUAL
UNION ALL SELECT 'Flavour', 'Apple' FROM DUAL
UNION ALL SELECT 'New', 'Banana' FROM DUAL
UNION ALL SELECT 'Banana', 'Flavour' FROM DUAL
/
DELETE FROM TEST
WHERE ROWID IN (
SELECT MIN( ROWID )
FROM test
GROUP BY
least( name, friend ),
greatest( name, friend )
HAVING COUNT(1) > 1 )
/
查询 1:
SELECT * FROM TEST
Results:
| NAME | FRIEND |
|---------|---------|
| Flavour | Apple |
| New | Banana |
| Banana | Flavour |
使用 MySQL 效率不高:
SQL Fiddle
MySQL 5.6 架构设置:
CREATE TABLE Test (
name VARCHAR(10),
friend VARCHAR(10)
)
/
INSERT INTO Test
SELECT 'Apple', 'Flavour' FROM DUAL
UNION ALL SELECT 'Flavour', 'Apple' FROM DUAL
UNION ALL SELECT 'New', 'Banana' FROM DUAL
UNION ALL SELECT 'Banana', 'Flavour' FROM DUAL
/
DELETE t1
FROM
TEST t1
INNER JOIN
TEST t2
ON ( t1.Name = t2.friend AND t1.friend = t2.name )
WHERE
t1.Name > t1.friend
/
查询 1:
SELECT * FROM TEST
Results:
| name | friend |
|--------|---------|
| Apple | Flavour |
| New | Banana |
| Banana | Flavour |