2012-02-21 84 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