2012-02-21 81 views
0

我有以下SQL,並且我希望order_item_wo_id列在嵌套sql中不存在的情況下返回null,並返回列的值oi.cop_workorder_id(如果有)。來自嵌套sql的返回值

我該如何做到這一點?

SELECT 
    cop.wo_id, 
    CASE 
    WHEN EXISTS (SELECT oi.cop_workorder_id 
      FROM oseo_orderitem oi 
      WHERE oi.cop_workorder_id = cop.wo_id) THEN 
      oi.cop_workorder_id 
    ELSE null 
    END AS order_item_wo_id 
FROM oseo_cop_wo cop 
where cop.wo_id = '123'; 

它看起來像oi.cop_workorder_id沒有得到認可嵌套SQL之外。

ERROR: missing FROM-clause entry for table "oi"

回答

4

除非我失去了一些東西,看起來你太過於複雜了。 只需使用一個左連接:

SELECT 
    cop.wo_id, 
    oi.cop_workorder_id AS order_item_wo_id 
FROM oseo_cop_wo AS cop 
    LEFT JOIN oseo_orderitem AS oi 
     ON oi.cop_workorder_id = cop.wo_id 
WHERE cop.wo_id = '123'; 
+0

dohh!我總是過於複雜,這很容易。保持簡單就需要創造力。 – capdragon 2012-02-21 18:46:04

1

使用可以使用COALESCE功能。它與Oracle的NVL功能類似。但是,我沒有PostgreSQL來編寫和測試這個。

+0

對不起,從文檔,我不明白我可以如何使用它。 – capdragon 2012-02-21 18:38:56

+0

ahhhh,我明白了,你的解釋有點誤導了我。看起來賈斯汀提供了正確的解決方案。 – northpole 2012-02-21 18:47:08

+0

是的,謝謝! (+1)努力 – capdragon 2012-02-21 18:47:34