我正在寻找一种方法,可以根据交叉表相对端的其中一个表中的外键从交集表中删除重复行。为了清楚起见,我将根据左侧'tableA'上的交集表中的外键值说明。
CREATE TABLE tableA
(
link varchar(64) NOT NULL PRIMARY KEY,
name varchar(64) NOT NULL
)
CREATE TABLE tableB
(
link varchar(64) NOT NULL PRIMARY KEY,
name varchar(64) NOT NULL
)
CREATE TABLE tableA_AND_tableB--Intersection Table
(
link varchar(64) NOT NULL PRIMARY KEY,
LtableA varchar(64) references tableA(link),
LtableB varchar(64) references tableB(link)
)
基本上,我想根据'LtableA'外键字段删除交集表中的所有重复行。例如:假设我在'tableA_AND_tableB'中有20个重复的'LtableA = id20140722',如何在不影响其他任何内容的情况下删除与'tableA_AND_tableB'中的值'id20140722'匹配的所有行?
希望我的问题有道理。
答案 0 :(得分:1)
Delete from tableA_AND_tableB where LtableA = 'id20140722'
这将使用该ID逐个删除该表中的所有行。或者,您可以看到this question以删除所有重复项。虽然答案将保留第一个或最后一个。
答案 1 :(得分:0)
如果要删除重复项,但仍保留每行的一个不同副本:
WITH t AS (
SELECT ROW_NUMBER() OVER(PARTITION BY LtableA, LtableB ORDER BY link) row_num
FROM tableA_AND_tableB
)
DELETE
FROM t
WHERE row_num > 1
AND LtableA = 'id20140722'