说我有这三个表:
Table: Baskets
id | name
1 Sale
2 Premium
3 Standard
4 Expired
Table: Fruit
id | name | basketid
1 Apples 1
2 Oranges 2
3 Grapes 3
4 Apples 2
5 Apples 4
Table: Veggies
id | name | basketid
1 Carrots 1
2 Peas 2
3 Asparagus 1
Run Code Online (Sandbox Code Playgroud)
看起来后两个表应该只是一个称为Produce的表,但是在实际情况下,有充分的理由使它们成为不同的表。我需要编写一个联接,如果购物篮的水果表或蔬菜表中有行,则返回行。我以为我可以通过两个左连接来完成此操作,如下所示:
Select Baskets.*, fruit.name as fruit,
veggies.name as veggies
from Baskets
left join Fruit on Baskets.id = Fruit.basketid
left join veggies on Baskets.id = Veggies.basketid
where Baskets.id = 2;
Run Code Online (Sandbox Code Playgroud)
但是此语句返回我想为空的字段中的值。实际输出:
id | name | fruit | veggies
2 Premium Oranges Peas
2 Premium Apples Peas
Run Code Online (Sandbox Code Playgroud)
我想要的输出:
id | name | fruit | veggies
2 Premium Oranges
2 Premium Apples
2 Premium Peas
Run Code Online (Sandbox Code Playgroud)
我该怎么做?
您需要将“水果和蔬菜”表合并为要加入的一个关系,例如:
Select Baskets.*, produce.fruitname as fruit, produce.veggiename as veggies
from Baskets
left join (SELECT basketid, name as fruitname, NULL as veggiename
FROM fruit
UNION
SELECT basketid, NULL, name
FROM veggies) produce
ON baskets.id = produce.basketid
where Baskets.id = 2;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15651 次 |
| 最近记录: |