如何筛选满足两列WHERE子句条件的表行?求更简洁写法
SQL查询优化:简化多条件组合筛选
我需要筛选出满足两列WHERE子句条件的表数据,目前写出了如下SQL查询语句,请问是否有更简洁的写法?
SELECT name, number FROM namenumber WHERE name IN ("Car") AND number = "1234" UNION SELECT name, number FROM namenumber WHERE name IN ("Train") AND number = "5678" UNION SELECT name, number FROM namenumber WHERE name IN ("Flight") AND number = "9012";
当然有更简洁的写法,你可以把多组(name, number)的匹配条件用IN结合元组的方式来实现,只需要一次查询就能完成,不需要多次UNION拼接,效率和可读性都会更好:
SELECT name, number FROM namenumber WHERE (name, number) IN ( ('Car', '1234'), ('Train', '5678'), ('Flight', '9012') );
补充说明:
- 这种元组匹配的写法支持绝大多数主流数据库(如MySQL、PostgreSQL、SQL Server等)
- 原SQL里的
UNION会自动去重,如果你的数据不会出现重复行,原本可以用UNION ALL提升性能,但优化后的写法本身就不存在重复结果的问题,无需额外处理 - 原SQL中
name IN ("Car")等价于name = "Car",优化后的写法已经直接整合了这个逻辑,无需单独写IN
内容的提问来源于stack exchange,提问作者Datha
相关产品推荐
相关产品推荐

