SQL连接排除数据

时间:2010-04-15 05:13:57

标签: sql join

说我有三张桌子:

Fruit (Table 1)
------
Apple
Orange
Pear
Banana

Produce Store A (Table 2 - 2 columns: Fruit for sale => Price)
-------------------------
Apple => 1.00
Orange => 1.50
Pear => 2.00

Produce Store B (Table 3 - 2 columns: Fruit for sale => Price)
------------------------
Apple => 1.10
Pear => 2.50
Banana => 1.00

如果我想用第1列写一个查询:在Produce Store A UNION Produce Store B提供的水果集,第2列:Produce Store A的水果价格(如果没有提供水果则为null) ,第3栏:Produce Store B的水果价格(如果没有提供水果,则为零),我将如何加入表格?

我面临着一个类似的问题(有更复杂的表格),无论我尝试什么,如果“水果”不在“生产商店”而在“生产商店b”,它被排除在外(因为我正在加入第一家农产品商店。我甚至写了一个子查询来生成一个完整的水果列表,然后离开加入Produce Store A,但它仍然消除了A中没有提供的成果吗?

1 个答案:

答案 0 :(得分:4)

关键是使用left join。这将包括左侧表中的列,即使右侧表中没有匹配的行。

例如:

select f.name, a.price, b.price
from Fruit f
left join ProduceStoreA a on a.Name = f.Name
left join ProduceStoreB b on b.Name = f.Name

如果在商店A中找不到水果,则第二列将为null。如果在商店B中找不到,则第三列将为null。如果两者都不卖水果,第二列和第三列都是null