SQL AND运算符不正常工作

时间:2017-11-28 10:00:39

标签: mysql sql

我有一个非常简单的MySQL表:

look at the screenshot

我的SQL查询如下:

10035

此查询不返回任何内容,但:parent place_id项符合两个条件。看起来问题是数据在两个不同的行中。如何重写查询以获得同时具有21 / Italy和22 / XL的place_ids?

3 个答案:

答案 0 :(得分:1)

您可以按以下方式重写查询,以获得具有所有这些属性的place_id,而不仅仅是单个属性

SELECT 
  rpcf.place_id 
FROM
  rel_place_custom_fields rpcf 
GROUP BY rpcf.place_id 
HAVING SUM(rpcf.field_id = 21 AND rpcf.field_value = 'Italy') 
AND SUM(rpcf.field_id = 22 AND rpcf.field_value = 'XL')

答案 1 :(得分:1)

我会选择M Khalid Junaid的回答。另一种方法是逐个查找条件:

select *
from places
where place_id in 
(
 select place_id from rel_place_custom_fields where field_id = 21 and field_value = 'Italy'
)
and place_id in 
(
 select place_id from rel_place_custom_fields where field_id = 22 and field_value = 'XL'
);

当然,EXISTS条款也可以这样做。

答案 2 :(得分:0)

首先,您需要在两个不同的条件之间使用OR

SELECT 
    DISTINCT rpcf.place_id
FROM 
    rel_place_custom_fields rpcf 
WHERE 
(
  (rpcf.field_id = 21 AND rpcf.field_value = 'Italy') 
  OR 
  (rpcf.field_id = 22 AND rpcf.field_value = 'XL')
)

还使用DISTINCT返回rpcf.place_id的uniq值。