检索状态为活动且具有通配符条件 (Mysql) 的数据



我在检索数据库中的数据时遇到问题。

问题:为什么我仍然检索已删除store_status的数据,但我的条件是store_status =仅"活动">

这是我的脚本的样子

SELECT * FROM store_locator WHERE store_status = 'Active' AND store_address LIKE '%Q%' 
OR branch_name LIKE '%Q%' OR city LIKE '%Q%'

和示例图像 示例图像

发生这种情况可能是因为你的branch_name里面有一个 Q,或者城市里有一个 Q。 OR 条件确保即使 AND 条件为假,记录仍可显示。 您的查询实质上是运行以下内容:

SELECT *
FROM store_locator
WHERE (store_status = 'Active'
AND store_address LIKE '%Q%')
OR (branch_name LIKE '%Q%')
OR (city LIKE '%Q%')

因此,如果满足以下任一条件,将显示记录:

  • store_status = "活动"和类似"%Q%"的store_address
  • branch_name 喜欢 '%Q%'
  • 城市喜欢 '%Q%'

如果这不是您想要的逻辑,则可以调整查询以在要使用的 AND/OR 条件两边包含方括号 ((。如果只想查看其中任何字段中包含 Q 的活动记录,则可能需要以下查询:

SELECT *
FROM store_locator
WHERE store_status = 'Active'
AND (store_address LIKE '%Q%'
OR branch_name LIKE '%Q%'
OR city LIKE '%Q%')

请注意,括号已将所有三个 LIKE '%Q%' 条件包含在单个条件中。

这是因为您没有将OR条件分组,

IMO 这应该是您要使用的正确查询:

SELECT * 
FROM store_locator 
WHERE store_status = 'Active' 
AND (store_address LIKE '%Q%' OR branch_name LIKE '%Q%' OR city LIKE '%Q%');

最新更新