SQL中如何独立校验两行数据的指定条件?
SQL查询问题解决方法
你的原查询逻辑存在矛盾:单条记录的InterfaceName不可能同时等于GigabitEthernet1/0/2和GigabitEthernet1/0/1,用AND连接这两个条件相当于要求一条记录满足两个互斥的要求,所以永远查不到结果。
你可以用UNION类语法解决,具体分两种场景:
场景1:获取两个接口各自符合条件的记录
用UNION ALL将两个独立查询的结果合并,直接返回符合条件的接口记录:
SELECT I.DisplayName, I.Status FROM Interfaces AS I WHERE I.[InterfaceName] = 'GigabitEthernet1/0/2' AND I.[Status] = '4' UNION ALL SELECT I.DisplayName, I.Status FROM Interfaces AS I WHERE I.[InterfaceName] = 'GigabitEthernet1/0/1' AND I.[Status] != '2'
UNION ALL会保留所有符合条件的记录,效率比UNION更高(UNION会自动去重,这里两个接口名称不同,不会有重复,所以用UNION ALL更合适)。
场景2:验证两个条件是否同时成立
如果你的需求是确认两个接口都满足各自的状态要求(而非返回具体记录),可以用EXISTS分别校验:
SELECT CASE WHEN EXISTS(SELECT 1 FROM Interfaces WHERE InterfaceName = 'GigabitEthernet1/0/2' AND Status = '4') AND EXISTS(SELECT 1 FROM Interfaces WHERE InterfaceName = 'GigabitEthernet1/0/1' AND Status != '2') THEN '两个接口均符合要求' ELSE '存在不符合要求的接口' END AS CheckResult
或者用分组统计的方式确认符合条件的接口数量:
SELECT CASE WHEN COUNT(*) = 2 THEN '两个接口均符合要求' ELSE '存在不符合要求的接口' END AS CheckResult FROM ( SELECT 1 FROM Interfaces AS I WHERE (I.[InterfaceName] = 'GigabitEthernet1/0/2' AND I.[Status] = '4') OR (I.[InterfaceName] = 'GigabitEthernet1/0/1' AND I.[Status] != '2') GROUP BY I.[InterfaceName] ) AS T
内容的提问来源于stack exchange,提问作者wetin
相关产品推荐
相关产品推荐

