通过将过滤条件放在ON子句中,我已经看到了在LEFT JOIN之前从RIGHT表过滤数据的答案。但是在JOIN之前,还没有找到对LEFT表进行过滤的答案。
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表的过滤?
答案 0 :(得分:1)
您只需使用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;
要在 right 表上进行过滤,请将条件移至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 = ?;