如何使用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