2016-11-06 49 views
0

我有兩個表:如何調用內部時,子查詢語句 - Mysql的

產品

id name category 
1 AAA BBB 
2 CCC DDD 
3 EEE FFF 

勳章

id id_product  date 
1  2  10/11/16 
2  2  06/16/16 
3  3  12/09/16 
4  1  02/06/16 
5  3  15/10/16 

爲了知道,如果一個產品有一個訂單我創建此選擇查詢:

SELECT id,name ,category 

CASE WHEN id IN (select id_product from Ordre) then 'Y' 
     ELSE 'N' END AS has_ordre 

FROM product; 

但這不適用於我,實際上我想創建一個包含產品信息的視圖,並且還具有「has_ordre」列來檢查產品是否具有ordre。

你有什麼建議嗎? 我是新的Mysql 在此先感謝。

+0

那麼,哪個RDBMS? – Strawberry

+0

您錯過了類別後的逗號。嘗試SELECT id,name,category,CASE WHEN ... – scaisEdge

+0

謝謝@scaisEdge您是我的寶貝,我錯過了逗號 – James

回答

0

您可以通過在兩個表上執行連接而不需要子查詢來執行所需操作,而order.id_product上的COUNT()可以計算每個產品的訂單數。注意:此查詢將完全(按設計)排除沒有訂單的產品。此外,對於該特定查詢的結果將顯示的訂單數量爲每個產品:

SELECT p.id, p.name, p.category, COUNT(o.id_product) AS num_orders 
FROM product p 
    RIGHT JOIN order o 
     ON p.id = o.id_product 
GROUP BY p.id 
ORDER BY num_orders 

您可以更改RIGHT JOIN爲左連接,如果你想顯示所有訂單,無論他們是否擁有一個有效的命令:

Here is a fiddle

+0

謝謝@Philip,您的解決方案適用於我 – James