我有一张帮助选择产品的桌子。
我想查询一下我收回的所有记录:
category_id = 'M10' and band_id = '010'
OR
category_id = 'M10' and band_id = '020'
AND
category_id = 'M50' and band_id = '010'
OR
category_id = 'M50' and band_id = '020'
我的查询:
SELECT
product.entry_id AS entry_id,
helpme.item_id AS product_id
FROM inbound_help_me_choose helpme
LEFT JOIN exp_channel_titles product ON (product.product_id = helpme.item_id)
WHERE
helpme.submarket_id = 'NZ'
AND
(
(helpme.category_id = 'M10' AND helpme.band_id = '010')
OR
(helpme.category_id = 'M10' AND helpme.band_id = '020')
)
在第一个类别上工作正常,但是一旦我添加新的WHERE条件失败:
SELECT
product.entry_id AS entry_id,
helpme.item_id AS product_id
FROM inbound_help_me_choose helpme
LEFT JOIN exp_channel_titles product ON (product.product_id = helpme.item_id)
WHERE
helpme.submarket_id = 'NZ'
AND
(
(helpme.category_id = 'M10' AND helpme.band_id = '010')
OR
(helpme.category_id = 'M10' AND helpme.band_id = '020')
)
AND
(
(helpme.category_id = 'M50' AND helpme.band_id = '010')
OR
(helpme.category_id = 'M50' AND helpme.band_id = '020')
OR
(helpme.category_id = 'M50' AND helpme.band_id = '030')
)
对我来说似乎没关系,所以我完全失去了为什么它不起作用。
答案 0 :(得分:3)
我认为你需要这个
SELECT
product.entry_id AS entry_id,
helpme.item_id AS product_id
FROM inbound_help_me_choose helpme
LEFT JOIN exp_channel_titles product ON (product.product_id = helpme.item_id)
WHERE
helpme.submarket_id = 'NZ'
AND
(
(helpme.category_id = 'M10' AND helpme.band_id IN ('010','020')) OR
(helpme.category_id = 'M50' AND helpme.band_id IN ('010','020','030'))
)
答案 1 :(得分:1)
稍微改变一下你需要的东西:
category_id = 'M10' and band_id = '010' OR category_id = 'M10' and band_id = '020'
AND
category_id = 'M50' and band_id = '010' OR category_id = 'M50' and band_id = '020'
与:
相同category_id = 'M10' and (band_id = '010' OR band_id = '020')
AND
category_id = 'M50' and (band_id = '010' OR band_id = '020')
与:
相同category_id = 'M10' and category_id = 'M50'
AND
(band_id = '010' OR band_id = '020') and (band_id = '010' OR band_id = '020')
category_id
不能同时为M10
和M50
,因此您无法获得任何结果......
答案 2 :(得分:1)
您在问题中显示的第二个示例查询中的where子句中的条件,即在其where子句中遇到问题的那个条件,永远无法评估为true ...
第一个例子中第一个where子句要求category_id等于M10。
然后在第二个例子中,where子句使用'和'添加另一组语句。问题是这个where子句只需要category_id为M50
的记录无论逻辑上有任何其他问题,我都可以相当肯定你找不到同时具有M10和M50的category_id的记录。
另一位用户,@ rs。发布了一个带有修改的where子句的查询,该子句符合开头或问题中指定的条件逻辑规则。
答案 3 :(得分:0)
x AND y
运算符意味着需要同时满足它适用的x
和y
条件。您只需要使用OR
运算符。