2017-11-03 219 views
0

查询将返回唯一1的结果,请大家帮忙SQL查询只返回1个结果

select 
p.products_id, pd.products_name 
from 
products_description pd, 
products_to_categories p2c, 
products p 
where 
EXISTS (SELECT p2pef.products_id 
        FROM products_to_products_extra_fields p2pef 
        WHERE p2pef.products_extra_fields_id = '78' 
       and p2pef.products_extra_fields_value = 'tak' 
        and p.products_id = p2pef.products_id) 
and 
EXISTS (SELECT p2pef.products_id 
        FROM products_to_products_extra_fields p2pef 
        WHERE p2pef.products_extra_fields_id = '94' 
        and p2pef.products_extra_fields_value = 'tak' 
        and p.products_id = p2pef.products_id)   


and p.products_status = '1' 
and p.products_id = pd.products_id 
and p.products_id = p2c.products_id 
and pd.language_id = '4' 
and p2c.categories_id = '26' 
group by p.products_id 

你认为怎么样使用EXISTS此查询?

您可能有另一种想法来显示来自products_to_products_extra_fields表的其他字段满足多个条件的产品表中的产品。

表模式:

产品(4行)

_________________________ 
products_id 
_________________________ 

1 
2 
3 
4 

products_to_products_extra_fields(8行)

___________________________________________________________________ 
products_id products_extra_fields_id products_extra_fields_value 
___________________________________________________________________ 
1 94 tak 

1 78 tak 

2 94 tak 

2 78 tak 

3 94 tak 

3 78 tak 

4 94 nie 

4 78 tak 

有效的查询应该返回(3行)

_______________ 
products_id 
_______________ 

1 

2 

3 
+0

'EXISTS'部分似乎没问题。问题可能是您的其他过滤器只选择了一个'product_id' –

+0

的确,所有* product_ids *都不带'EXISTS'子句? – Parfait

+0

嗨。 “满足几个条件”是什么意思?您似乎对输入“条件”的某种表示形式和输出查询感兴趣,但您没有足够详细地解释我们可以知道什么是正确的答案。请同时阅读[mcve]并采取行动。事实上,你的问题到底是什么? – philipxy

回答

1

呦ü可以使用一个having子句来实现这一目标还有:

select  p.products_id 
from  products p 
inner join products_description pd 
     on p.products_id = pd.products_id 
inner join products_to_categories p2c 
     on p.products_id = p2c.products_id 
inner join products_to_products_extra_fields p2pef 
     on p.products_id = p2pef.products_id 
where  p.products_status = '1' 
and   pd.language_id = '4' 
and   p2c.categories_id = '26' 
and   p2pef.products_extra_fields_value = 'tak' 
and   p2pef.products_extra_fields_id in ('78', '94') 
group by p.products_id 
having  count(distinct p2pef.products_extra_fields_id) = 2 

..但结果是一样的。如果您的记录数量少于预期,请确保您期望在输出中的所有产品也符合有关状态,语言和类别的其他条件。

注意:对表达式连接条件使用join语法。

+0

我相信它并不完全等同于任何数据。如果他对'product_id'有额外的字段行(78,'tak'),(94,'nie')感兴趣,那么你的方法可能很难延伸到正确的工作。 –

+1

事实上,对于其他条件,必须写另一个“有条件”的条件。例如:count(当p2pef.products_extra_fields_value ='tak'且products_extra_fields_id ='78'时的唯一情况,则当p2pef.products_extra_fields_value ='nie'且products_extra_fields_id ='94'时为1,则2结束) – trincot