将SQL查找表与数据表连接起来

时间:2010-01-06 18:22:48

标签: sql join database-design lookup

我有一个查找表,表示城市字段为CityId,CityName

CityId   CityName
1        New York 
2        San Francisco
3        Chicago

我有一个订单表,其中包含以下字段:CityId,CustId,CompletedOrders,PendingOrders

CityId CustId CompletedOrders PendingOrders
1       123   100             50
2       123   75              20

我想要一张表/报告,列出所有城市中给定客户的订单详情,即我需要的结果是:

CityId CityName      CustId CompletedOrders PendingOrders
1      New York      123    100             50
2      San Francisco 123    75              20
3      Chicago       123    0               0

怎么做?

2 个答案:

答案 0 :(得分:9)

SELECT
  c.CityId
  c.CityName
  o.CustId,
  o.CompletedOrders
  o.PendingOrders
FROM cities c
LEFT JOIN orders o ON ( c.CityId = o.CityId )

这将返回您想要的所有行,但对于details中不存在的行,它将返回NULL个值,因此您将获得:

CityId CityName      CustId CompletedOrders PendingOrders
1      New York      123    100             50
2      San Francisco 123    75              20
3      Chicago       123    NULL            NULL

获取0的解决方案取决于您的数据库。使用MySQL IFNULL,Oracle使用NVL

答案 1 :(得分:1)

试试这个

select c.CityId,c.CityName,o.CustId,o.CompletedOrders,o.PendingOrders

from orders Left join cities 

on o.CityId = c.CityId