2

首先,我不是 SQL 专家,所以可能我遗漏了一些括号或其他一些愚蠢简单的东西;-)

谁能告诉我为什么这有效并返回 4 行:

SELECT ppa.products_id FROM products_propattributes ppa 
WHERE ( (options_id = "11" AND options_values_id = "18") 
OR (options_id = "4" AND options_values_id = "4") )

而这个没有,虽然它应该匹配 1 行:

SELECT ppa.products_id FROM products_propattributes ppa 
WHERE ( (options_id = "11" AND options_values_id = "18") 
AND (options_id = "4" AND options_values_id = "4") )

任何帮助将不胜感激!提前致谢..

巴斯

4

3 回答 3

3

在第二个查询中,您只有ANDs,因此options_id = "11"AND不可能options_id = "4"同时匹配。

当然与options_values_id = "18"AND相同options_values_id = "4"

于 2013-09-14T14:06:21.503 回答
2

第二个查询查找options_id = "11" AND options_id = "4"所在的行。这是不可能的,因为options_id列云只有一个值。

于 2013-09-14T14:06:33.253 回答
2

因为每一行的一列中只能有一个可能的值。如果您想获得ID同时具有返回 true 的条件OR

SELECT ppa.products_id 
FROM products_propattributes ppa 
WHERE (options_id = "11" AND options_values_id = "18") OR 
      (options_id = "4" AND options_values_id = "4") 
GROUP BY ppa.products_id
HAVING COUNT(*) = 2
于 2013-09-14T14:07:23.143 回答