选择然后删除mysql查询

时间:2017-10-26 10:34:15

标签: mysql join

我有一个用户表,一个或多个用户可以关联。我在数据库中有一个名为referred的列,如果它有一个ID,如果该ID从数据库中删除,那么相关用户也必须这样做。

这是我的问题:

START TRANSACTION;
DELETE FROM users
WHERE id IN 
  ( SELECT a.id
    FROM users a 
      JOIN users b ON a.referred = b.id );

如果我使用Josh Murray删除用户id='1',则必须删除符合条件referred='1'的所有人。

2 个答案:

答案 0 :(得分:1)

这不会吗?

Delete from users where (id = 1 or referred = 1)

答案 1 :(得分:1)

我建议使用外键创建表,并指定操作ON DELETE,例如:

ALTER TABLE users
    ADD CONSTRAINT FK_REFERRED
    FOREIGN KEY (referred)
    REFERENCES users(id)
    ON DELETE CASCADE

因此,如果例如ID = 4的用户引用了ID = 1的用户而另一个ID = 7的用户引用了第一个用户(ID = 4),那么当用户删除ID = 1时,ID = 4的用户也会被删除,ID = 7的用户也会被删除。

所以你不必费心去除所有其他的孩子'数据的节点