クエリを試行しているときに、1 つの条件を句から句に変更すると結果が変わるouter join
ことに気付きました。びっくりしましたが、以下のようにテーブルとクエリを簡略化したので、理解できたと思いますが、しっかりした説明を聞きたいです。where
join
create table t0 (id int, b int);
create table t1 (id int, b int);
insert into t0 (id, b) values (1, 10), (2, 10);
insert into t1 (id, b) values (1, 2);
select t0.id, t0.b
from t0
left outer join t1 on
t0.id = t1.id
where
t0.b = 10
and
t1.b = 2
;
id | b
----+----
1 | 10
(1 row)
次に、条件の 1 つをwhere
the 句から tojoin
句に移動します。
select t0.id, t0.b
from t0
left outer join t1 on
t0.id = t1.id
and
t1.b = 2
where
t0.b = 10
;
id | b
----+----
1 | 10
2 | 10
(2 rows)
ストレートな理由付けの書き方を知っていますか?