如何为现有表添加布尔列以标识另一表中是否存在匹配ID
解决方案
你可以通过ALTER TABLE添加字段后,结合EXISTS子查询完成UPDATE操作,精准判断每个id是否在bar表中有匹配记录:
-- 第一步:为foo表添加布尔字段 ALTER TABLE test.foo ADD COLUMN has_product BOOL; -- 第二步:根据bar表的匹配情况更新字段值 UPDATE test.foo SET has_product = EXISTS ( SELECT 1 FROM test.bar WHERE bar.id = foo.id );
原理说明
EXISTS子查询会针对foo表的每一行,检查bar表中是否存在相同id的记录:- 存在匹配记录时,
EXISTS返回true,对应has_product设为true; - 无匹配记录时,
EXISTS返回false,对应has_product设为false。
- 存在匹配记录时,
替代方案(LEFT JOIN方式)
如果更习惯用连接查询,也可以通过LEFT JOIN结合IS NOT NULL实现:
ALTER TABLE test.foo ADD COLUMN has_product BOOL; UPDATE test.foo SET has_product = bar.id IS NOT NULL FROM test.foo LEFT JOIN test.bar ON foo.id = bar.id;
这个方法通过左连接保留foo的所有行,再判断连接后的bar.id是否非空,以此确定是否存在匹配记录。
验证结果
执行上述语句后,test.foo表的结果将符合预期:
id has_product 1 true 2 false 3 false 4 true
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

