为什么按此顺序连接表什么都不返回?

时间:2017-03-22 07:58:43

标签: sql oracle

我正在尝试加入特定列的两个表A和B.

虽然A的列除了值之外还包含NULL,但B的列不包含任何NULL。

当我尝试以下列方式加入A和B时

SELECT *
FROM A INNER JOIN B ON A.XXX = B.XXX;

什么都不返回,但是

SELECT *
FROM B INNER JOIN A ON B.XXX = A.XXX;

返回我预期的结果。

为什么会这样?

简化表格结构:

Table A:   TableB:
  XXX        XXX
 -----      ------
  111        111
  222        222
  333        222
  NULL       333
  444        444
   :          :

2 个答案:

答案 0 :(得分:0)

这很奇怪,因为JOIN的顺序通常无关紧要,但您可以尝试在加入条件下检查NULL,例如

 FROM A INNER JOIN B ON A.XXX = B.XXX
 OR A.XXX IS NULL;

答案 1 :(得分:0)

这是我的测试数据。

SQL> select * from a;

       XXX COL2
---------- ---------
           22-MAR-17
       111 22-MAR-17
       222 22-MAR-17
       333 22-MAR-17
       444 22-MAR-17

SQL> select * from b;

       XXX       COL1
---------- ----------
       555        678
       444        567
       333        456
       222        345
       222        234
       111        123

6 rows selected.

SQL>

正如我们所料,连接顺序对结果集没有影响。在这两种情况下,我们在A.XXX和B.XXX的每场比赛中获得一行:

SQL> select a.*, b.*
  2  from a inner join b 
  3       on a.xxx = b.xxx
  4  /

       XXX COL2             XXX       COL1
---------- --------- ---------- ----------
       444 22-MAR-17        333        567
       333 22-MAR-17        333        456
       222 22-MAR-17        222        345
       222 22-MAR-17        222        234
       111 22-MAR-17        111        123

6 rows selected.

SQL> select a.*, b.*
  2  from b inner join a
  3      on b.xxx = a.xxx
  4  /

       XXX COL2             XXX       COL1
---------- --------- ---------- ----------
       444 22-MAR-17        333        567
       333 22-MAR-17        333        456
       222 22-MAR-17        222        345
       222 22-MAR-17        222        234
       111 22-MAR-17        111        123

6 rows selected.

SQL> 

因此,您所做的与您在此处发布的内容有所不同,或者您的数据中存在一些您未向我们展示的特性。