「非順次」オン式を使用した 2 つの右外部結合に関する、非常に単純でありながら興味深いクエリを理解する上で問題があります。クエリは次のとおりです。
select * from C
right outer join A on A.F1 = C.F1
right outer join B on B.F1 = C.F1;
ここにテーブルがあります:
create table A ( F1 varchar(200));
create table B ( F1 varchar(200));
create table C ( F1 varchar(200));
ここにいくつかの行があります:
insert into A values ('A');
insert into A values ('B');
insert into A values ('C');
insert into B values ('B');
insert into B values ('C');
insert into B values ('D');
insert into C values ('A');
insert into C values ('C');
insert into C values ('D');
注: クエリselect * from C right outer join A on A.F1 = C.F1 right outer join B on B.F1 = C.F1; 結合式は両方ともテーブル C を参照します。
クエリは (列の次に行) を返します
(NULL,NULL, B),(C, C, C).(NULL, **NULL**, D)
そして私は(SQLについての私のほとんどの理解では)期待していました
(NULL,NULL, B),(C, C, C),(NULL, **D**, D)
SQL (Microsoft SQL と MySQL でテスト済み) がこれらの値に到達する論理シーケンスは何ですか。
私の「実行」シーケンスでは、テーブル A で A、null (B の場合)、C、null (D の場合) の値を使用し、テーブル B では、「製品」の前に null (A の場合)、B、C、D の値を使用します。 C (B,C,D) と合併します。
Gawie PS: MySQL と Microsoft SQL 2008 を使用してこれをテストしましたが、結果は同じでした。