我正在尝试加入特定列的两个表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
: :
答案 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>
因此,您所做的与您在此处发布的内容有所不同,或者您的数据中存在一些您未向我们展示的特性。