SQL Server关联主从表查询所有商品是否存在订单的高效写法
最高效的实现SQL如下
SELECT p.Id, IIF(EXISTS(SELECT 1 FROM [Order] o WHERE o.Id = p.Id), 1, 0) AS Has_Order FROM Product p
方案说明
- 采用
EXISTS半连接实现,比LEFT JOIN后再去重/分组的性能更高:半连接匹配到第一条符合条件的订单记录就会终止扫描,不需要处理所有匹配的订单行,也不需要额外的去重运算,订单表数据量越大性能优势越明显。 - 由于
Order是SQL Server内置保留关键字,因此查询时需要用方括号[]包裹表名避免语法报错。 - 如果使用的是SQL Server 2012之前的版本,可以把
IIF替换为CASE WHEN逻辑,效果完全一致:
SELECT p.Id, CASE WHEN EXISTS(SELECT 1 FROM [Order] o WHERE o.Id = p.Id) THEN 1 ELSE 0 END AS Has_Order FROM Product p
内容的提问来源于stack exchange,提问作者developer
相关产品推荐
相关产品推荐

