在左联接之前从左表过滤数据

时间:2018-11-29 21:43:15

标签: mysql sql join left-join outer-join

通过将过滤条件放在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表的过滤?

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

1 个答案:

答案 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 = ?;