我有一个用户表,一个或多个用户可以关联。我在数据库中有一个名为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'
的所有人。
答案 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
的用户也会被删除。
所以你不必费心去除所有其他的孩子'数据的节点