该表具有包含源和目标的复合键
source target
1 2
2 3
2 4
3 -1
4 -1
我想删除目标值为-1的记录,并且源不应位于目标中。为了达到相同的目的,我使用了两个不同的查询来删除相关记录。
删除关系
在源和目标中删除值为2的记录(在上述示例中)将导致 空表。
在其他任何记录中都没有引用以-1作为目标值和源值的条目,因此将其视为孤立记录并删除。
是否有更好的删除方法?
答案 0 :(得分:1)
此:
delete t
from tablename t
where
t.target = -1
and
t.source not in (
select target from (
select target from tablename t
) b
)
除非带有target = 1
的所有行都包含在source
的任何行中,否则将删除所有行。
请参见demo。
对于此示例数据:
target
仅最后一行将被删除。