我有一个非常简单的MySQL表:
我的SQL查询如下:
10035
此查询不返回任何内容,但:parent
place_id项符合两个条件。看起来问题是数据在两个不同的行中。如何重写查询以获得同时具有21 / Italy和22 / XL的place_ids?
答案 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值。