2014-08-28 105 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,標題,說明)。

相關問題