2017-03-22 9 views
-3

私は特定の列に参加しようとしている2つのテーブルAとBを持っています。この順序でテーブルを結合すると何も返されないのはなぜですか?

Aの列には値以外にNULLも含まれますが、Bの列にはNULLは含まれません。

私は

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

何も返さない、次のようにAとBに参加しようが、

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 
    :   : 
+3

これらは同じ結果を返さなければなりません - これを実証する[mcve]を作成できますか(つまり実際のCREATE TABLEとINSERTを使ってこれらのクエリを使用することができますか? ) –

+0

テーブル構造とデータの詳細を共有できますか?運用データのサンプルデータがない場合 –

+0

フィールドのタブなどの隠し文字がないかチェックしてください。上に書いたようにクエリは正常に実行されます。 – Jens

答えて

0

JOINの順序として奇妙だが、一般的には問題ありませんが、あなたは

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

私のデータに何か問題があるかもしれません... –

0

のような条件を参加にNULLをチェックしてみてくださいここでは私ですテストデータ。

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上のすべての試合のために1行を取得:

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> 

ですから、あなたがここに投稿したものとは別の何かをやっている、またはあなたの「自分のデータでは、いくつかの特色があります私たちを示していない。

+0

ummm、私はそれを調べます。 –

関連する問題