Oracle:如何在SQL中右键连接值列表

时间:2017-05-24 11:22:58

标签: sql oracle list join

我有一个字符串,如

String ids =“1,2,3,4”;

在Oracle数据库中, 现在我可以选择

select a.name from a where id in (ids);

结果是如果表中存在1,2,4,则会显示在列表中。如果4不在表中,则不会显示。

我想进行正确的加入,例如

select a.name from a right join on a.id in (ids);

我希望结果可以

1's name
2's name
3's name
null

2 个答案:

答案 0 :(得分:0)

请勿使用right joinleft join更加直观(保留第一个表中的所有行以及 second 中的匹配行)。在Oracle中,您可以这样做:

select i.id, a.name
from (select 1 as id from dual union all
      select 2 as id from dual union all
      select 3 as id from dual union all
      select 4 as id from dual
     ) i left join
     a
     on i.id = a.id;

还有其他方法可以生成ID列表。如果您正在学习Oracle,这种方法相对简单。

答案 1 :(得分:0)

您可能需要以下内容:

select d.id, case when IDs.id is not null then name end asname
from yourData d
     left join 
     (
        select trim(regexp_substr('1,2,3', '[^,]+', 1, level)) as id
        from dual
        CONNECT BY instr('1,2,3', ',', 1, level - 1) > 0
     ) IDs
     on d.id = IDs.id

这给出了:

        ID NAME
---------- ------
         1 Name 1
         2 Name 2
         3 Name 3
         4