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

如何在SQL的WHERE子句中多次使用同一列

解决WHERE子句中同一列多条件筛选的问题

嘿,先提个关键问题:你写的示例查询逻辑上有矛盾哦——同一行的CATEGORY不可能同时等于1和2,所以这个查询会返回空结果。我猜你真正想要的是找出那些同时拥有两种符合条件记录的员工:比如某员工既有CATEGORY=1且STATUS包含'A'的记录,又有CATEGORY=2且STATUS='B'的记录,对吧?下面给你几种靠谱的实现方式:

方式1:用EXISTS子查询(直观且性能友好)

这种方式适合精准匹配员工是否满足多个独立条件,尤其是当表上有EMPLOYEE、CATEGORY这类字段的索引时,性能很不错:

SELECT DISTINCT EMPLOYEE
FROM EMPLOYMENT e_main
WHERE EXISTS (
    -- 检查该员工是否有CATEGORY=1且STATUS含'A'的记录
    SELECT 1
    FROM EMPLOYMENT e_sub1
    WHERE e_sub1.EMPLOYEE = e_main.EMPLOYEE
      AND e_sub1.CATEGORY = 1
      AND e_sub1.STATUS LIKE '%A%'
)
AND EXISTS (
    -- 检查该员工是否有CATEGORY=2且STATUS='B'的记录
    SELECT 1
    FROM EMPLOYMENT e_sub2
    WHERE e_sub2.EMPLOYEE = e_main.EMPLOYEE
      AND e_sub2.CATEGORY = 2
      AND e_sub2.STATUS = 'B'
);

如果需要返回该员工的所有相关记录,你可以在这个基础上做JOIN,或者调整查询范围。

方式2:用GROUP BY + HAVING(适合统计类需求)

如果你的需求是先筛选出符合任一条件的行,再找出同时满足两种条件的员工,这种方式很简洁:

SELECT EMPLOYEE
FROM EMPLOYMENT
WHERE (CATEGORY = 1 AND STATUS LIKE '%A%') 
   OR (CATEGORY = 2 AND STATUS = 'B')
GROUP BY EMPLOYEE
HAVING COUNT(DISTINCT CATEGORY) = 2; -- 确保两种分类的记录都存在

这里用COUNT(DISTINCT CATEGORY)是为了避免同一个员工多条同分类记录干扰统计结果,如果你的数据里每个员工每个分类只有一条记录,直接用COUNT(*)也可以。

方式3:用窗口函数(返回所有符合条件的行)

如果你需要返回所有满足条件的员工的相关行(而不仅仅是员工ID),窗口函数是个好选择:

WITH employee_check AS (
    SELECT 
        EMPLOYEE, 
        CATEGORY, 
        STATUS,
        -- 标记该员工是否有CATEGORY=1的符合条件记录
        MAX(CASE WHEN CATEGORY=1 AND STATUS LIKE '%A%' THEN 1 ELSE 0 END) OVER (PARTITION BY EMPLOYEE) AS has_cat1,
        -- 标记该员工是否有CATEGORY=2的符合条件记录
        MAX(CASE WHEN CATEGORY=2 AND STATUS='B' THEN 1 ELSE 0 END) OVER (PARTITION BY EMPLOYEE) AS has_cat2
    FROM EMPLOYMENT
)
SELECT EMPLOYEE, CATEGORY, STATUS
FROM employee_check
WHERE has_cat1 = 1 AND has_cat2 = 1;

补充:如果是筛选符合任一条件的行

要是你的需求其实只是找出所有符合CATEGORY=1且STATUS含'A'或者CATEGORY=2且STATUS='B'的行,那只需要把原查询的AND改成OR就行:

SELECT EMPLOYEE, CATEGORY, STATUS 
FROM EMPLOYMENT 
WHERE (CATEGORY = 1 AND STATUS LIKE '%A%') 
   OR (CATEGORY = 2 AND STATUS = 'B');

内容的提问来源于stack exchange,提问作者Chuck

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:00:46