左连接条件

ste*_*tej 19 mysql sql t-sql left-join

假设我有这些表

create table bug (
    id int primary key, 
    name varchar(20)
)
create table blocking (
    pk int primary key,
    id int, 
    name varchar(20)
)

insert into bug values (1, 'bad name')
insert into bug values (2, 'bad condition')
insert into bug values (3, 'about box')
insert into blocking values (0, 1, 'qa bug')
insert into blocking values (1, 1, 'doc bug')
insert into blocking values (2, 2, 'doc bug')
Run Code Online (Sandbox Code Playgroud)

我想在id列上加入表格,结果应该是这样的:

id          name                 blockingName
----------- -------------------- --------------------
1           bad name             qa bug
2           bad condition        NULL
3           about box            NULL
Run Code Online (Sandbox Code Playgroud)

这意味着:我想从#bug返回所有行,'blockingName'列中应该只有'qa bug'值或NULL(如果找不到#blocking中的匹配行)


我天真的选择是这样的:

select * from #bug t1 
    left join #blocking t2 on t1.id = t2.id
    where t2.name is null or t2.name = 'qa bug'
Run Code Online (Sandbox Code Playgroud)

但这不起作用,因为似乎条件首先应用于#blocking表然后它被连接.

这个问题的最简单/典型解决方案是什么?(我有一个嵌套选择的解决方案,但我希望有更好的东西)

sam*_*son 41

简单地在加入中加入"qa bug"标准:

select t1.*, t2.name from #bug t1 
left join #blocking t2 on t1.id = t2.id AND t2.name = 'qa bug'
Run Code Online (Sandbox Code Playgroud)