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
相关产品推荐
相关产品推荐

