0

我被困在范围搜索查询上。请看下面的例子:

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 之间但仅适用于男性类别的记录。

谢谢你的建议。

4

2 回答 2

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"))
于 2012-05-14T20:35:42.003 回答
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 岁的产品。

于 2012-05-14T20:37:29.623 回答