2014-08-28 108 views
0

如何获取尺寸小且颜色为绿色的产品ID列表?mysql:如何获得具有两种不同条件的产品ID列表?

我有一个表作为

prodid | heading | description 

20 | color | green 

20 | size  | s 

21 | size  | s 

22 | size  | s 

我的查询:

select prodid from tablename 
where heading in('color','size') and description in ('green','s'); 

,但需要输出为“含体积小,绿色的产品编号列表”。

prodid | heading | description 

20 | color | green 

20 | size | s 

任何人都可以帮我写一个查询来获得上面的输出。

回答

0

可以使用嵌套的“和”和“或的构建查询:

select prodid from tablename where (heading = 'color' and description = 'green') or (heading = 'size' and description = 's'); 
+0

这不是他在问什么......他希望**两个条件都可以在同一个prodid上得到满足;) – Frazz 2014-08-28 06:30:50

+0

啊,我明白了。但是他的样本输出实际上并不是他想要的......“正确的”答案会给每个prodid一行。 – 2014-08-28 06:36:26

+0

是的......他的结果集并不完全清楚......我同意 – Frazz 2014-08-28 06:37:42

2

因为你所需要的产品的颜色和大小行强加的所有条件,加入表本身:

select t1.prodid 
from mytable t1 
join mytable t2 on t2.prodid = t1.prodid 
where t1.heading = 'color' and t1.description = 'green' 
and t2.heading = 'size' and t2.description = '5' 
0
select prodid from tablename 
    where heading = 'color' 
    and description = 'green' 
    and prodid in (select prodid from tablename 
     where heading = 'size' 
     and description = 's'); 
0

我会使用这样的:

SELECT prodid 
FROM mytable a 
WHERE EXISTS (
    SELECT prodid 
    FROM mytable b 
    WHERE b.prodid=a.prodid AND b.heading='size' AND b.description='small' 
) AND EXISTS (
    SELECT prodid 
    FROM mytable c 
    WHERE c.prodid=a.prodid AND c.heading='color' AND c.description='green' 
) 

即使它使用表3次,我发现它更具可读性和可扩展性。

如果性能是一个问题,可以通过仅使用两次表来完成,如波希米亚人所建议的。但首先确保你有一个索引(prodid,标题,说明)。

相关问题