【问题标题】:sql conditional joinsql条件连接
【发布时间】:2023-04-10 13:56:01
【问题描述】:

我有 3 张桌子:

table1:table1_col1, table1_col2,table1_col3
table2 : table1_col1, table2_col2,table2_col3
table3 : table1_col1, table3_col2,table3_col3

正如我试图通过命名来解释的那样,table1:table1_col1 是一个唯一键,它可以引用 table2 : table1_col1 或 table3 : table1_col1 但不能同时引用两者。 我需要在 table1、table2、table3 之间进行连接:

join table1 with table2 if table1:table1_col1 = table2 : table1_col1
join table1 with table3 if table1:table1_col1  = table3 : table1_col1

这在 sql 语法中可能吗?
谢谢。

【问题讨论】:

  • 可能需要查看一些示例数据。我不确定我是否理解目标。 . .

标签: sql oracle10g


【解决方案1】:

我假设您也想要表 2 和 3 中的相应列。

select 
      t1.table_col1,
      t2.table2_col2,
      t2.table2_col3,
      t3.table3_col2,
      t3.table3_col3
   from
      table1 t1
         left join table2 t2
           on t1.table1_col1 = t2.table1_col1
         left join table3 t3
           on t1.table1_col1 = t3.table1_col1

另外,如果您只想要表 2 或 3 中的列,并且它们是相同的数据类型,您可以使用 NVL() 函数,例如

select 
      t1.table_col1,
      nvl( t2.table2_col2, t3.table3_col2 ) as SecondCol,
      nvl( t2.table2_col3, t3.table3_col3 ) as ThirdCol
   from
      table1 t1
         left join table2 t2
           on t1.table1_col1 = t2.table1_col1
         left join table3 t3
           on t1.table1_col1 = t3.table1_col1

【讨论】:

    【解决方案2】:

    您可以使用LFET JOIN

    FROM table1 
    LEFT JOIN table2 ON table1.table1_col1 = table2.table1_col1
    LEFT JOIN table3 ON table1.table1_col1  = table3.table1_col1
    

    【讨论】:

      猜你喜欢
      • 2013-05-18
      • 2014-12-25
      • 2011-03-29
      • 2012-09-17
      • 2020-05-19
      • 2015-05-13
      相关资源
      最近更新 更多