2015-10-09 78 views
2

如何使用SQL刪除給定表中的冗餘記錄?如何刪除給定表中的冗餘記錄,使用SQL

FROM | TO  | TIME 
======================== 
USA | CHINA | 4 
USA | AFRICA | 2 
CHINA | USA  | 4 
CALI | NEWZLND | 3 

這裏美國到中國&中國到美國是多餘的記錄,我只需要其中的一個是在決賽桌。我怎樣才能爲這個詞組的SQL查詢?

+0

你能告訴我們你有表,任何事情你到目前爲止已經試過,任何代碼,我們可以幫助您?其他任何其他最終結果? – Veljko89

+1

請不要張貼圖片。更好地發佈我們可以複製和粘貼的內容。否則,我們很難幫助你。 – Shnugo

回答

0

試試看這個。

小提琴:http://sqlfiddle.com/#!9/c3211/2

BTW:改變你的列名。不要使用像,TO和時間保留的話......

CREATE TABLE tbl(FromColumn VARCHAR(100),ToColumn VARCHAR(100),TIMEColumn INT); 

INSERT INTO tbl VALUES 
('USA','CHINA',4) 
,('USA','AFRICA',2) 
,('CHINA','USA',4) 
,('CALI','NEWZLND',3); 

SELECT * 
FROM tbl AS tbl 
WHERE (SELECT COUNT(*) 
     FROM tbl AS x 
     WHERE x.FromColumn>x.ToColumn 
     AND x.FromColumn=tbl.ToColumn 
     AND x.ToColumn=tbl.FromColumn 
     AND x.TIMEColumn=tbl.TIMEColumn 
     )=0; 
-1

聽起來好像你有一種自反的關係,類似於「Person1是Person2的朋友」 - 它暗示着「Person2是Person1的朋友」,並且你不想存儲這兩個記錄。假設你存儲哪一個並不重要,你可以刪除重複項。在這裏,我保留Person1在Person2之前出現的那個:

CREATE TABLE Friendship(
    Person1  varchar(128), 
    Person2  varchar(128), 
    PRIMARY KEY(Person1, Person2) 
); 

DELETE FROM Friendship 
WHERE EXISTS(
    SELECT * 
    FROM Friendship as reflex 
    WHERE Friendship.Person1 = reflex.Person2 
     AND Friendship.Person2 = reflex.Person1 
     AND Friendship.Person2 < Friendship.Person2 
);  
+0

對不起,我錯過了你的形象(你沒有標題),但我的解決方案仍然通過刪除多餘的記錄來解決你的問題。你也可以用SELECT做同樣的事情。 – cliffordheath