如何在SQL视图中新增字段判断CommissionNumber是否存在于另一张表
正确SQL写法
写法1:EXISTS子查询(推荐,性能更优,无重复行风险)
SELECT mo.CommissionNumber, mo.CreationDate, IsCancelled = CASE WHEN EXISTS ( SELECT 1 FROM dbo.CanceledOrders co WHERE co.CommissionNumber = mo.CommissionNumber ) THEN CAST(1 AS BIT) ELSE CAST(0 AS BIT) END FROM dbo.MyOrders mo
说明:
- SQL Server通常用
BIT类型模拟布尔值,1对应true,0对应false - 该写法不需要处理
CanceledOrders表中重复的CommissionNumber记录,不会产生重复行,执行效率更高
写法2:LEFT JOIN关联(适合后续需要同步取取消订单其他字段的场景)
SELECT mo.CommissionNumber, mo.CreationDate, IsCancelled = CAST(CASE WHEN co.CommissionNumber IS NOT NULL THEN 1 ELSE 0 END AS BIT) FROM dbo.MyOrders mo LEFT JOIN ( -- 先去重避免关联后产生重复行 SELECT DISTINCT CommissionNumber FROM dbo.CanceledOrders WHERE CommissionNumber IS NOT NULL ) co ON mo.CommissionNumber = co.CommissionNumber
报错原因说明
你之前的语法错误是列别名的书写顺序错误:SQL中列的定义顺序是计算表达式 AS 别名,或者别名 = 计算表达式,你把别名IsCancelled写在了表达式前面,才会触发语法报错。
内容的提问来源于stack exchange,提问作者d00d
相关产品推荐
相关产品推荐

