我正在寻找一个SQL更新命令,根据在另一个表中的任何子记录中是否为真,在一个表中设置布尔列的值。
这是数据库迁移的一部分 - 子表上的列正被父表上的列替换。
以下SQL适用于PostgreSQL
UPDATE parenttable
SET booleanColumn
= EXISTS
(
SELECT 1
FROM childtable
WHERE booleanColumn = true
AND parentid = parenttable.id
);
如果parenttable.booleanColumn
的任何关联值为true,则childtable.booleanColumn
设置为true;如果childtable.booleanColumn
的所有关联值均为false,则设置为false。
我需要在SQL Server上运行相同的查询,但无法找到解决方案。
答案 0 :(得分:2)
你很亲密。您需要case
声明:
UPDATE parenttable
SET booleanColumn = (CASE WHEN EXISTS (SELECT 1
FROM childtable c
WHERE c.booleanColumn = 1 AND
c.parentid = parenttable.id
)
THEN 1 ELSE 0 END);