sql条件连接

时间:2011-03-02 18:33:05

标签: sql oracle10g

我有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语法中是否可行?
谢谢。

2 个答案:

答案 0 :(得分:1)

您可以使用LFET JOIN

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

答案 1 :(得分: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