查询客户所有计算机BitLocker状态(ON/OFF)的SQL语句问题
修正后的SQL查询方案
问题分析
原查询存在三个核心问题:
- 仅关联
client_id未关联计算机唯一标识computer_id,导致同一客户下的计算机状态混淆 - 子查询仅筛选
protection_status="ON"的记录,无法正确显示未启用BitLocker的计算机状态 - 未按计算机分组获取最新记录,无法保证取到每月新增的最新BitLocker数据
修正后的SQL语句
SELECT c.*, CASE WHEN EXISTS ( SELECT 1 FROM bitlocker b JOIN ( -- 获取每台计算机的最新BitLocker记录ID(按id递增取最新) SELECT computer_id, MAX(id) AS latest_id FROM bitlocker WHERE client_id = 72 GROUP BY computer_id ) latest_b ON b.id = latest_b.latest_id WHERE b.computer_id = c.computer_id AND b.protection_status = "ON" ) THEN "ON" ELSE "OFF" END AS bitlocker_status FROM computers c WHERE c.client_id = 72;
关键逻辑说明
- 获取最新记录:通过子查询按
computer_id分组,取MAX(id)得到每台计算机的最新BitLocker记录(若date_recorded更可靠,可替换为MAX(date_recorded)后关联对应记录) - 状态判断:用
EXISTS检查该计算机的最新记录中是否存在protection_status="ON"的驱动器,存在则返回ON,否则返回OFF - 保障完整性:直接从
computers表出发查询指定客户的所有计算机,确保不会遗漏任何一台设备
内容的提问来源于stack exchange,提问作者Ronaldo
相关产品推荐
相关产品推荐

