2014-02-27 67 views
1

我有一個PRODUCTS表,其中包含產品記錄或子產品記錄。子產品通過在HIGHERCATALOGID列中具有條目來指示,而對於產品HIGHERCATALOGID列爲NULL。我試圖編寫一個查詢,如果catalogid指向產品記錄,則輸出產品名稱,如果catalogid指向子產品,則輸出父產品的名稱。這是我試圖做的:CASE中的MySQL SELECT語句

SELECT p.catalogid, p.highercatalogid, oi.orderid 
CASE 
    WHEN highercatalogid is null then cname\ 
ELSE 
    SELECT cname from products p1 where p.highercatalogid=p1.catalogid 
END as name 
FROM products p, oitems oi 
WHERE p.catalogid=oi.catalogid 

但是,這會導致錯誤。

錯誤代碼:1064.您的SQL語法錯誤;檢查對應於你的MySQL服務器版本使用附近的「情況下,當highercatalogid是空的商品P然後CNAME別的選擇CNAME。」在第2行

什麼是這樣做的正確方法正確的語法手冊?

回答

2

,您可以嘗試這樣

SELECT p.catalogid, p.highercatalogid, oi.orderid, 
     COALESCE(p2.cname, p.cname) cname 
    FROM oitems oi JOIN products p 
    ON oi.catalogid = p.catalogid LEFT JOIN products p2 
    ON p.highercatalogid = p2.catalogid 

這裏是SQLFiddle演示

+0

謝謝!我不熟悉COALESCE運營商,這正是醫生訂購的。 – user3358413

+1

@ user3358413如果這回答你的問題,最好是如果你接受答案,點擊答案左上角的刻度標記 - 謝謝! –

1
SELECT p.catalogid, p.highercatalogid, oi.orderid 

CASE 
WHEN highercatalogid is null then cname 
ELSE 
SELECT cname from products p1 where p.highercatalogid=p1.catalogid 
END as name 
FROM products p, oitems oi 
WHERE p.catalogid=oi.catalogid 
+1

您應該添加一些文字解釋說這個問題是'oi.orderid'後面缺少的','會更清晰。 – Gorkk

+0

謝謝。我修改了我的答案 – realnumber3012