我有一个MySQL数据库,其中有一个关系表,可以简化为:

CREATE TABLE `Paths` (
  `origin` char(32) NOT NULL,
  `destination` char(32) NOT NULL,
  `id` int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY  (`id`),
)

这是一种多对多的关系。
我想删除所有路径,其中所有路径从该原点仅指向某个特定位置,例如Neverland
此SQL应该可以工作:
DELETE FROM Paths WHERE origin IN (SELECT DISTINCT origin FROM Paths WHERE destination = 'Neverland') AND origin NOT IN (SELECT DISTINCT origin FROM Paths WHERE destination <> 'Neverland');

但是,有没有更好、更有效的方法呢?
谢谢!

最佳答案

尝试:

  Delete Paths
  From Paths p
  Where Not Exists
      (Select * From paths
       Where Origin = p.origin
       And Destination <> 'Neverland')

关于mysql - 如何有效地删除多对多关系表中所有仅在关系的一侧具有给定目的地的行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6684066/

10-10 23:40