SQL删除带有复合主键的孤立记录

时间:2019-04-23 07:19:19

标签: mysql sql

该表具有包含源和目标的复合键

source    target
 1        2
 2        3
 2        4
 3       -1
 4       -1

我想删除目标值为-1的记录,并且源不应位于目标中。为了达到相同的目的,我使用了两个不同的查询来删除相关记录。

删除关系

  

在源和目标中删除值为2的记录(在上述示例中)将导致   空表。

在其他任何记录中都没有引用以-1作为目标值和源值的条目,因此将其视为孤立记录并删除。

是否有更好的删除方法?

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

仅最后一行将被删除。