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

NOM*_*OMO 4 sql lookup database-design join

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

CityId   CityName
1        New York 
2        San Francisco
3        Chicago
Run Code Online (Sandbox Code Playgroud)

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

CityId CustId CompletedOrders PendingOrders
1       123   100             50
2       123   75              20
Run Code Online (Sandbox Code Playgroud)

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

CityId CityName      CustId CompletedOrders PendingOrders
1      New York      123    100             50
2      San Francisco 123    75              20
3      Chicago       123    0               0
Run Code Online (Sandbox Code Playgroud)

怎么做 ?

Pet*_*ang 9

SELECT
  c.CityId
  c.CityName
  o.CustId,
  o.CompletedOrders
  o.PendingOrders
FROM cities c
LEFT JOIN orders o ON ( c.CityId = o.CityId )
Run Code Online (Sandbox Code Playgroud)

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

CityId CityName      CustId CompletedOrders PendingOrders
1      New York      123    100             50
2      San Francisco 123    75              20
3      Chicago       123    NULL            NULL
Run Code Online (Sandbox Code Playgroud)

0取而代之的解决方案取决于您的数据库.使用MySQL IFNULL,与Oracle一起使用NVL.