使用通配符条件检索处于活动状态的数据(Mysql)

时间:2018-08-30 01:25:35

标签: mysql sql

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

问题:为什么我仍要检索具有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%'

和示例图片 sample image

2 个答案:

答案 0 :(得分:0)

这很可能是因为您的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 ='有效'AND store_address类似于'%Q%'
  • 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%'三个条件全部括起来。

答案 1 :(得分:0)

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

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

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