我需要将两个表连接在一起,但我希望它们返回带有“标签”列的行,而不是它们只是同一条记录。
我有这样的设置:
create table main_record(
id int not null primary key,
foo_entry_id int not null,
bar_entry_id int not null
);
create table entry (
id int not null primary key,
entry_value varchar(255) not null
);
insert into entry values (1, 'foo');
insert into entry values (2, 'bar');
insert into main_record values (1, 1, 2);
select
case when e1.id is null then 'should be foo'
else 'should be bar' end as a_label,
e1.id as foo_id,
e2.id as bar_id
from main_record mr
left join entry e1 on mr.foo_entry_id = e1.id
left join entry e2 on mr.bar_entry_id = e2.id;
我只得到一份记录:
+ ------------- + ----------- + ----------- +
| a_label | foo_id | bar_id |
+ ------------- + ----------- + ----------- +
| should be bar | 1 | 2 |
+ ------------- + ----------- + ----------- +
我需要这样的地方:
+ ------------- + ----------- + ----------- +
| a_label | foo_id | bar_id |
+ ------------- + ----------- + ----------- +
| should be foo | 1 | NULL |
+ ------------- + ----------- + ----------- +
| should be bar | NULL | 2 |
+ ------------- + ----------- + ----------- +
我目前正在使用UNION
来执行此操作,但出于篇幅的原因,我将其余部分省略。我试图避免使用UNION
,所以我可以对较大查询的一部分进行此操作。
答案 0 :(得分:0)
分别进行两个JOIN
并将结果与UNION
一起添加
select
'should be foo' a_label,
e.id foo_id,
null bar_id
from main_record mr
left join entry e
on mr.foo_entry_id = e.id
union
select
'should be bar',
null,
e.id
from main_record mr
left join entry e
on mr.bar_entry_id = e.id