我有以下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子句条目
答案 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来编写和测试它。