Oracle RIGHT OUTER JOIN无法正常工作?

时间:2017-01-11 19:16:11

标签: sql oracle outer-join

好吧,假设我有两个表:Table1 [Rows:id,num,name],Table2 [Rows:num,description]。我想查询Table1以得到Table1.num = Table2.num所有行的id。所以我写道:

SLECT t1.id, t1.num, t2.description
 FROM Table1 t1 RIGHT OUTER JOIN
      Table2 t2 ON (t1.num = t2.num)

/ Table2只有一条记录如下:Num = 123,Description =' Abc' /

所以我的结果应该是这样的: 1,123,Abc 2,123,Abc 5,123,Abc

但我得到的结果是; 3,111,Null 4,222,Null

4 个答案:

答案 0 :(得分:2)

如果您希望a中的所有行以及b中的匹配行,请使用LEFT JOIN

  SELECT count(a.object_id)
  FROM table1 a LEFT OUTER JOIN
       table2 b
       ON a.num = b.num /*I only have one record in table b, which num field = '123'*/

LEFT JOIN保留 first 表中的所有行,无论ON子句的计算结果是否为true。无论RIGHT JOIN子句的计算结果为true,ON都会保留 second 表中的所有行。您好像想要LEFT JOIN

作为一般规则,我不使用RIGHT JOIN。我发现阅读FROM子句的逻辑“保持到目前为止看到的表中的所有行”要容易得多。

答案 1 :(得分:0)

使用RIGHT OUTER JOIN至少的行数与 right 表中的行数相同。

答案 2 :(得分:0)

当您进行连接时,您将获得符合条件的两个表中的记录数。如果表A只有一条记录,那么表B可能有多条满足连接条件的记录。

因此,期望只有一条记录是不合理的。如果您应该根据业务规则只有一条记录,那么您需要过滤第二个表中的记录,以便只产生一个记录。您选择返回哪一个完全取决于业务规则,而且数据意味着不是语法。

答案 3 :(得分:0)

SELECT DISTINCT解决了我的问题。感谢各位的帮助!