You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 11:25:08