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

MySQL不使用OR如何查询匹配多个指定字段值的表记录

原查询失效原因
  1. 字段名书写错误:语句中写的是带空格的property type,实际表中字段名为PROPERTY_TYPE
  2. 匹配逻辑错误:LIKE '%Residential,office%'的匹配规则是查找字段值中连续包含Residential,office(带逗号拼接)的记录,但你的字段是单值存储,单条记录只会存Residential、Commercial、office其中一个独立值,不可能出现逗号拼接的目标字符串,因此无返回结果。
    你之前尝试FIND_IN_SET等方案无效,是因为这类函数是专门用于匹配「字段本身存储逗号分隔多值」的场景,和你当前单值存储的表结构不匹配。
无OR的可行实现方案

方案1:IN运算符(优先推荐,全数据库通用)

IN运算符本身就是为单字段多值精确匹配设计的,不需要写多个OR条件,新增筛选值只需要在括号内追加即可,还能正常命中字段索引,查询性能最优:

SELECT * FROM property_types 
WHERE property_type IN ('Residential', 'office');
-- 注意括号内的值大小写需要和库内实际存储的大小写保持一致,大小写不敏感的数据库可忽略该要求

如果后续需要新增匹配的属性类型,直接在IN的列表里追加对应字符串即可,比如要加Industrial就改成IN ('Residential', 'office', 'Industrial'),逻辑简洁不会出现大量OR堆叠的问题。

方案2:CTE/临时表关联(适合大量筛选值、复杂查询场景)

如果需要匹配的属性类型数量多,甚至筛选值是从其他业务逻辑计算、关联其他表得到的,可以用CTE或者临时表存目标类型值,再做关联查询,示例(支持CTE的主流数据库通用):

WITH target_property_types (type_val) AS (
    VALUES 'Residential', 'office'
    -- 可在此处追加任意多目标值,也可以替换为子查询从其他关联表拉取符合要求的类型值
)
SELECT p.* 
FROM property_types p
INNER JOIN target_property_types t 
ON p.property_type = t.type_val;

注意:不要用LIKE做这类枚举值的精确匹配,一是无法命中索引性能差,二是容易出现误匹配——比如存在ResidentialPlot这类值时,LIKE '%Residential%'会把不符合要求的记录也查出来。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 10:24:12