MySQL中如何基于表关联关系查询合同的设备关联状态
合同关联设备标记查询方案
需求:查询所有合同ID,并为每个合同标记是否关联了带设备的服务:
- YES:该合同至少有一个关联服务的
device_id不为空 - NO:该合同所有关联服务的
device_id都为空,或无关联服务
实现方案1:使用EXISTS子查询
该方案通过子查询快速判断是否存在符合条件的服务,性能较优:
SELECT c.contract_id, CASE WHEN EXISTS ( SELECT 1 FROM services s WHERE s.contract_id = c.contract_id AND s.device_id IS NOT NULL ) THEN 'YES' ELSE 'NO' END AS has_associated_device FROM contracts c;
实现方案2:使用左连接+分组聚合
该方案通过左连接保留所有合同,再通过聚合函数判断是否存在非空的device_id:
SELECT c.contract_id, CASE WHEN MAX(CASE WHEN s.device_id IS NOT NULL THEN 1 ELSE 0 END) = 1 THEN 'YES' ELSE 'NO' END AS has_associated_device FROM contracts c LEFT JOIN services s ON c.contract_id = s.contract_id GROUP BY c.contract_id;
内容的提问来源于stack exchange,提问作者Luis Urán
相关产品推荐
相关产品推荐

