我被困在范围搜索查询中。请参阅以下示例:
SELECT * FROM product where status='A' and subcat_id=5 AND product.price < 50 AND product.price BETWEEN 50 AND 100 AND category = "male"
在上面的示例中,它不会返回低于50的记录,但它们仍在数据库中。
如果我在下面的第二个例子中尝试:
SELECT * FROM product where status='A' and subcat_id=5 AND product.price < 50 OR product.price BETWEEN 50 AND 100 AND category = "male"
它返回所有不属于男性类别但小于50
的记录最后,我希望得到的记录范围小于50或介于50到100之间,但仅适用于男性类别。
感谢您的建议。
答案 0 :(得分:3)
您还需要更多()
来对条件进行分组。如果我理解正确,您可能希望product.price < 50
用于任何其他匹配,或product.price BETWEEN 50 AND 100
仅用于男性。在这种情况下,请使用()
将这两个条件分组。
SELECT *
FROM
product
where
status='A'
and subcat_id=5
AND (product.price < 50 OR (product.price BETWEEN 50 AND 100 AND category = "male"))
答案 1 :(得分:3)
AND
的优先级高于OR
。您的查询解释如下:
SELECT col1, col2, ..., coln
FROM product
WHERE (status='A' AND subcat_id=5 AND product.price < 50) OR
(product.price BETWEEN 50 AND 100 AND category = 'male')
您需要在适当的位置插入括号以正确分组术语。唯一剩下的问题就是放在哪里。
我认为你的意思是:
SELECT col1, col2, ..., coln
FROM product
WHERE status='A'
AND subcat_id=5
AND (
product.price < 50 OR
(product.price BETWEEN 50 AND 100 AND category = 'male')
)
这将显示所有类别的50以下的产品,以及男性类别的50到100之间的产品。