如何使用SQL刪除給定表中的冗餘記錄?如何刪除給定表中的冗餘記錄,使用SQL
FROM | TO | TIME
========================
USA | CHINA | 4
USA | AFRICA | 2
CHINA | USA | 4
CALI | NEWZLND | 3
這裏美國到中國&中國到美國是多餘的記錄,我只需要其中的一個是在決賽桌。我怎樣才能爲這個詞組的SQL查詢?
如何使用SQL刪除給定表中的冗餘記錄?如何刪除給定表中的冗餘記錄,使用SQL
FROM | TO | TIME
========================
USA | CHINA | 4
USA | AFRICA | 2
CHINA | USA | 4
CALI | NEWZLND | 3
這裏美國到中國&中國到美國是多餘的記錄,我只需要其中的一個是在決賽桌。我怎樣才能爲這個詞組的SQL查詢?
試試看這個。
小提琴: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;
聽起來好像你有一種自反的關係,類似於「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
);
對不起,我錯過了你的形象(你沒有標題),但我的解決方案仍然通過刪除多餘的記錄來解決你的問題。你也可以用SELECT做同樣的事情。 – cliffordheath
你能告訴我們你有表,任何事情你到目前爲止已經試過,任何代碼,我們可以幫助您?其他任何其他最終結果? – Veljko89
請不要張貼圖片。更好地發佈我們可以複製和粘貼的內容。否則,我們很難幫助你。 – Shnugo