Фильтровать данные из левой таблицы ПЕРЕД ЛЕВЫМ СОЕДИНЕНИЕМ - PullRequest
0 голосов
/ 30 ноября 2018

Я видел ответы о фильтрации данных из таблицы RIGHT до LEFT JOIN, поместив условие фильтрации в предложение ON.Но я не нашел ответа на фильтрацию таблицы LEFT перед JOIN.

CREATE TABLE tbl1
    (col1 varchar(1), col2 varchar(1))
;

INSERT INTO tbl1
    (col1, col2)
VALUES
    ('a', '1'),
    ('b', '1'),
    ('a', '2')
;


CREATE TABLE tbl2
(col1 varchar(1))
;

INSERT INTO tbl2
    (col1)
VALUES
    ('a'),
    ('b')
;

Это отфильтровывает данные из таблицы RIGHT:

select tbl1.col1 tlc1, tbl1.col2 tlc2, tbl2.col1 t2c1
from
  tbl1
left join
 tbl2
on (tbl1.col1=tbl2.col1 and tbl1.col2=1)

Но как мне достичьАналогичным образом выполняется фильтрация таблицы LEFT без выполнения подзапроса?

https://www.db -fiddle.com / f / xyoJDjHVQHYBdTxZFCRtJt / 1

1 Ответ

0 голосов
/ 30 ноября 2018

Вы просто используете предложение where:

select tbl1.col1 as tlc1, tbl1.col2 as tlc2, tbl2.col1 as t2c1
from tbl1 left join
     tbl2
     on tbl1.col1 = tbl2.col1 and tbl1.col2 = 1
where tbl1.col2 = 1;

Чтобы отфильтровать таблицу вправо , вы перемещаете условие в предложение on:

select tbl1.col1 as tlc1, tbl1.col2 as tlc2, tbl2.col1 as t2c1
from tbl1 left join
     tbl2
     on tbl1.col1 = tbl2.col1 and tbl1.col2 = 1 and tbl2.col2 = ?;
...