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

发布于 2024-08-16 16:07:05 字数 638 浏览 5 评论 0原文

我有一个查找表,表示带有字段 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

如何做到这一点?

I have a lookup table say cities with fields CityId, CityName

CityId   CityName
1        New York 
2        San Francisco
3        Chicago

I have an orders table which has fields: CityId, CustId, CompletedOrders, PendingOrders

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

I want a table/report that lists orders details of a given customer in all cities, i.e. the result I need is:

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

How to do that ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

川水往事 2024-08-23 16:07:05
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

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

This will return all the rows that you want, but for the rows that don't exist in details it will return NULL values, so you would get:

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

The solution to get 0 instead depends on your database. With MySQL use IFNULL, with Oracle use NVL.

樱花细雨 2024-08-23 16:07:05

试试这个

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

from orders Left join cities 

on o.CityId = c.CityId

try this

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

from orders Left join cities 

on o.CityId = c.CityId
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文