从嵌套的sql返回值

时间:2012-02-21 18:26:39

标签: sql postgresql

我有以下SQL,如果嵌套的sql中不存在该项,我希望order_item_wo_id列返回null,如果匹配,则返回列oi.cop_workorder_id的值。

我该如何做到这一点?

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之外无法识别。

  

错误:表“oi”缺少FROM子句条目

2 个答案:

答案 0 :(得分:4)

除非我遗漏了什么,否则你似乎过于复杂了。 只需使用LEFT JOIN:

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';

答案 1 :(得分:1)

使用可以使用COALESCE功能。它的工作方式类似于Oracle的NVL功能。但是,我没有可用的PostgreSQL来编写和测试它。