如果找不到元素,如何打印列值的"NULL"或"0"值?

Vla*_*mir 1 mysql sql oracle

我需要遍历一组值(小于10)并查看它们是否在表中.如果是这样,我需要打印出所有记录值,但如果该项目不存在,我仍然希望它包含在打印结果中,尽管具有NULL或0值.因此,例如,以下查询返回:

select * 
  from ACTOR 
 where ID in (4, 5, 15);
Run Code Online (Sandbox Code Playgroud)

+ ---- + ----------------------------- ------------- + + ---------- + ------ +
| ID | NAME | 描述| ORDER_ID | TYPE |
+ ---- + ----------------------------- ------------- + + ---------- + ------ +
| 4 | [TEST-1] | | 3 | NULL |
| 5 | [TEST-2] | | 4 | NULL |
+ ---- + ----------------------------- ------------- + + ---------- + ------ +
但是我希望它能够回归
+ ---- + ----------------------------- ------------- + + ---------- + ------ +
| ID | NAME | 描述| ORDER_ID | TYPE |
+ ---- + ----------------------------- ------------- + + ---------- + ------ +
| 4 | [TEST-1] | | 3 | NULL |
| 5 | [TEST-2] | | 4 | NULL |
| 15 | NULL | | 0 | NULL |
+ ---- + ----------------------------- ------------- + + ---------- + ------ +

这可能吗?

OMG*_*ies 8

要获得所需的输出,首先必须构造一个包含所需ACTOR.id值的派生表.UNION ALL适用于小型数据集:

SELECT *
  FROM (SELECT 4 AS actor_id
          FROM DUAL
        UNION ALL
        SELECT 5
          FROM DUAL
        UNION ALL
        SELECT 15
          FROM DUAL) x
Run Code Online (Sandbox Code Playgroud)

有了它,你可以OUTER JOIN到实际的表来获得你想要的结果:

   SELECT x.actor_id,
          a.name,
          a.description,
          a.orderid,
          a.type
     FROM (SELECT 4 AS actor_id
             FROM DUAL
           UNION ALL
           SELECT 5
             FROM DUAL
           UNION ALL
           SELECT 15
             FROM DUAL) x
LEFT JOIN ACTOR a ON a.id = x.actor_id
Run Code Online (Sandbox Code Playgroud)

如果x和之间没有匹配a,则a列将为null.因此,如果你想在id 15不匹配时orderid为零:

   SELECT x.actor_id,
          a.name,
          a.description,
          COALESCE(a.orderid, 0) AS orderid,
          a.type
     FROM (SELECT 4 AS actor_id
             FROM DUAL
           UNION ALL
           SELECT 5
             FROM DUAL
           UNION ALL
           SELECT 15
             FROM DUAL) x
LEFT JOIN ACTOR a ON a.id = x.actor_id
Run Code Online (Sandbox Code Playgroud)