sql - 嵌套sql的返回值

标签 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 之外没有被识别。

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

最佳答案

除非我遗漏了什么,否则你似乎把它复杂化了。 只需使用 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';

关于sql - 嵌套sql的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9383003/

相关文章:

java - 是否有可能获得在数据库包中声明的常量值? (SQL 或 Java)

sql - JPA Query - 位置参数中的 sql 注入(inject) jpa native 查询

django - 已保存查询集的 Python/Django 递归问题

postgresql - 如何为nodejs设置 Node 路径(Ubuntu)

postgresql - 过滤函数返回的数据

sql - boolean 类型的 OLEDB JET 和 NULL 值

sql - SQL Server 中非聚集索引的解决方法最大键长度

c# - 在这种情况下更正 SQL 语法

ruby-on-rails - Rails 5 - PostgreSQL 删除列和索引已被破坏的迁移

postgresql - PL/pgSQL 中的 EXECUTE...INTO...USING 语句无法执行到记录中?