【问题标题】:Conditional Inner Join in OracleOracle中的条件内连接
【发布时间】:2015-04-02 08:32:53
【问题描述】:

我有一个关于条件内部联接的问题。请看下面的sqlfiddle。

http://sqlfiddle.com/#!4/6dc88

在这里,我试图获得所有相同的名称。但如果 id 为 1,那么也会获得相同的名称和 id 为 0 的名称。您的帮助将不胜感激。谢谢。这是一个例子

Table1 
Id           |            Name
1            |            A
2            |            B
3            |            C

Table2
Id           |            Name
1            |            a
2            |            b
3            |            c
0            |            d

这是我的期望

A            |            a
B            |            b
C            |            c
A            |            d

编辑:对不起,我忘了提及我的查询,这是我迄今为止尝试过的..

select t1.name, t2.name from table1 t1
inner join table2 t2 on 
CASE
 WHEN t1.id = t2.id_copy and t1.id = 1 THEN 
    0
    else
    t1.id
END = t2.id_copy

提前致谢。

【问题讨论】:

  • 虽然在您的问题中包含指向 SQL 小提琴的链接通常是个好主意,但也请在问题中添加您的 SQL 语句。
  • @ytg 我已经编辑了问题。

标签: database oracle oracle11g inner-join


【解决方案1】:

假设您的意思是如果 table2.id 为 0,那么它应该与 table1.id = 1 匹配,那么这应该可以解决问题:

with table1 as (select 1 id, 'A' name from dual union all
                select 2 id, 'B' name from dual union all
                select 3 id, 'C' name from dual),
     table2 as (select 1 id, 'a' name from dual union all
                select 2 id, 'b' name from dual union all
                select 3 id, 'c' name from dual union all
                select 0 id, 'd' name from dual)
select t1.name, t2.name
from   table1 t1
       inner join table2 t2 on (t1.id = case when t2.id = 0 then 1 else t2.id end);

NAME NAME_1
---- ------
A    a     
B    b     
C    c     
A    d     

如果有更复杂的逻辑决定 table2 中的不匹配 (t1.id = t2.id) 行如何与 table1 匹配,那么您必须解释逻辑。

【讨论】:

    【解决方案2】:

    我个人更喜欢使用更简单的东西,例如:

    select t1.name, t2.name from table1 t1
    inner join table2 t2
    on t1.id = t2.id_copy or (t1.id = 1 and t2.id_copy = 0)
    

    【讨论】:

      猜你喜欢
      • 2012-08-16
      • 1970-01-01
      • 1970-01-01
      • 2014-06-15
      • 2022-01-03
      • 2020-06-26
      • 1970-01-01
      • 2011-11-08
      • 1970-01-01
      相关资源
      最近更新 更多