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

SQL如何在多列中查询多个指定值?技术方法求助

多列查询多个值的SQL实现

你可以通过以下几种实用方式实现需求:

方法一:OR结合IN子句(最直观写法)

直接分别判断firstname或lastname是否在目标值列表中,逻辑清晰,易于维护:

SELECT * 
FROM emp
WHERE firstname IN ('JOHN', 'SCOTT', 'MARK', 'Ann')
   OR lastname IN ('JOHN', 'SCOTT', 'MARK', 'Ann');

方法二:行构造器结合IN子句(简洁写法,需数据库支持)

如果你的数据库支持行构造器(如MySQL、PostgreSQL),可以用这种方式把目标值与两列的组合做匹配:

SELECT * 
FROM emp
WHERE (firstname, lastname) IN (
    ('JOHN', NULL),
    ('SCOTT', NULL),
    ('MARK', NULL),
    ('Ann', NULL),
    (NULL, 'JOHN'),
    (NULL, 'SCOTT'),
    (NULL, 'MARK'),
    (NULL, 'Ann')
);

注:这种写法可读性稍弱,性能不一定优于方法一,适合特定场景使用。

方法三:EXISTS子查询(适合大量目标值场景)

当目标值数量较多时,通过子查询统一维护值列表,避免重复编写:

SELECT e.* 
FROM emp e
WHERE EXISTS (
    SELECT 1 
    FROM (
        SELECT 'JOHN' AS name UNION ALL
        SELECT 'SCOTT' UNION ALL
        SELECT 'MARK' UNION ALL
        SELECT 'Ann'
    ) AS names
    WHERE names.name = e.firstname OR names.name = e.lastname
);

额外提示

如果需要忽略大小写匹配,可根据数据库特性转换后比较,比如:

SELECT * 
FROM emp
WHERE LOWER(firstname) IN ('john', 'scott', 'mark', 'ann')
   OR LOWER(lastname) IN ('john', 'scott', 'mark', 'ann');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 03:14:52