簡體   English   中英

如何使用SQL刪除給定表中的冗余記錄

[英]How to remove redundant records in the given table, using SQL

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

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

在這里,“美國到中國”和“中國到美國”是多余的記錄,在決賽桌中我只需要其中一個即可。 我該如何用短語sql查詢呢?

這樣嘗試。

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

順便說一句:更改了您的列名。 不要使用諸如FROM,TO和TIME之類的保留字...

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
);    

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM