我需要写一个棘手的查询,经过大量的研究,我找不到一个解决方案,符合我的情况。
我正在处理一个现有的数据库,在那里我需要引用可以有子委员会的委员会,因此委员会表如下所示:
+----+--------------------+------------------+
| id | name | parent_id |
+----+--------------------+------------------+
| 1 | comm1 | NULL |
| 2 | comm2 | 1 |
| 3 | comm3 | 1 |
| 4 | comm4 | 5 |
+----+--------------------+------------------+
我需要添加一个fk,以便parent\u id字段引用实际父项的id字段
ALTER TABLE committee
ADD CONSTRAINT fk_parent_id
FOREIGN KEY (parent_id )
REFERENCES committee(id);
但这失败了(不能添加或更新子行:外键约束失败),因为数据中的某个父id字段引用已被删除。
因此,为了能够添加这个约束,我想将引用不存在的委员会作为父委员会的委员会的parent\ id字段设置为null。我想做一些类似的事情:
UPDATE committee c1
SET c1.parent_id = NULL
WHERE NOT EXISTS
(
SELECT *
FROM committee c2
WHERE c2.id = c1.parent_id
);
但是很明显这不起作用,因为我不能在子查询中引用c1。
有没有一个可行的解决方案来实现这一点?提前谢谢你的帮助
1条答案
按热度按时间1yjd4xko1#
你可以利用
Left Join
取而代之的是:我们可以通过不考虑这些行(其中
parent_id
已经是了null
.