【问题标题】:How to join oracle tables如何加入oracle表
【发布时间】:2014-08-14 19:22:36
【问题描述】:

我有两张桌子。

表 1

ID        STRING
1          ABC
2          CDE
3          FGH

表 2

ID        STRING
1          xyz
2          uvw
4          abc

我希望输出为

ID    STRING       STRING2
1      ABC          xyz
2      CDE          uvw
3      FGH          null
4      null         abc

我应该使用哪个连接。是否可以在简单的 SQL 查询中做到这一点?

【问题讨论】:

标签: sql database oracle join


【解决方案1】:

您可以做的是使用Union 组合两个不同的结果集。这将为您提供您正在寻找的东西:

SELECT     tab1.ID,
           tab1.name,
           tab2.name2
FROM       tab1 tab1
LEFT JOIN tab2 tab2 ON tab1.ID = tab2.ID
UNION

SELECT     tab2.ID,
           tab1.name,
           tab2.name2
FROM       tab1 tab1
RIGHT JOIN tab2 tab2 ON tab1.ID = tab2.ID

你可以在这里看到-> http://sqlfiddle.com/#!4/cf9e2/10

希望对你有帮助!!!

【讨论】:

  • 好兄弟...你比我快...我也在尝试。
  • @Nisar Hehe.. 发布它。不要让努力白费!!此外,它会让人们清楚这不仅仅是“让我们做一个完整的外部连接”的事情。!!来吧!
  • @satwik 兄弟还有一件事,如果有 3 个表,我们需要写 6 个并集吗?
  • @user2914613 如果你有 3、4 个或更多这样的表,你最好创建一个视图或使用临时表!!
  • 很抱歉 Satwik,但 Oracle 的一般规则是 never use temporary tables 如果可以避免,请抄送 @user2914613。这就是 FULL OUTER JOINS 有用的原因。
【解决方案2】:
with 
t1 as
  (select 1 id, 'ABC' string from dual
   union 
   select 2, 'CDE' from dual
   union
   select 3, 'FGH' from dual
  ),
t2 as
  (select 1 id, 'xyz' string from dual
   union 
   select 2, 'uvw' from dual
   union
   select 4, 'abc' from dual)
select COALESCE(t1.id,t2.id) id, t1.string, t2.string string2 
from t1 full outer join t2 on (t1.id = t2.id)
order by 1

【讨论】:

    【解决方案3】:

    我想完全加入是正确的

    select * from tab1 t1 full join tab2 t2 on t1.id = t2.id
    

    【讨论】:

    • 完全外连接是正确的。 RIGHT OUTER 不会从连接的两边返回数据。
    • @Ben 完全外联是不行的。您需要来自不同表中两个不同列的 ID 值。您会看到 ID 值 3 不存在于表 2 中,同样 ID 值 4 也不存在于表 1 中。您将如何将它们精确地组合到一个结果集中?
    • @Ben 另外,正如我所建议的,上述查询没有给出预期的结果。你可以在这里看到->sqlfiddle.com/#!4/cf9e2/12
    • 你会使用COALESCE() @Satwik...这就是FULL OUTER JOIN 在这里要做的事情,并且在某些情况下会明显优于2个连接和不同的排序,尤其是在以后版本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-09
    • 2015-03-12
    • 1970-01-01
    相关资源
    最近更新 更多