SQL Server - 如果列在另一个表中的任何匹配行中为true,则将一个表中的列设置为true

时间:2015-11-11 01:59:12

标签: sql sql-server

我正在寻找一个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上运行相同的查询,但无法找到解决方案。

1 个答案:

答案 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);