【发布时间】:2016-11-09 19:16:29
【问题描述】:
刚开始学习SQL,正在网上做一些练习题。 我在这里遇到了这个问题(页面上的#11):http://sqlzoo.net/wiki/AdventureWorks_hard_questions
这是我们将用于解决此问题的 3 个表的架构:
CustomerAW(CustomerID、FirstName、MiddleName、LastName、CompanyName、EmailAddress)
客户地址(客户 ID、地址 ID、地址类型)
地址(AddressID、AddressLine1、AddressLine2、City、StateProvince、CountyRegion、PostalCode)
问题是:
对于在达拉斯拥有“主办公室”的每位客户,请显示“主办公室”的 AddressLine1 和“送货”地址的 AddressLine1 - 如果没有送货地址,请将其留空。每位客户使用一行。
下面是我的代码:
SELECT CustomerID, AddressType, AddressLine1
FROM CustomerAW
JOIN CustomerAddress
USING (CustomerID)
JOIN Address
USING (AddressID)
WHERE AddressType IN 'Main Office'
AND City = 'Dallas'
;
下面是我得到的输出:
Result:
CustomerID AddressType AddressLine1
112 Main Office P.O. Box 6256916
130 Main Office Po Box 8259024
165 Main Office 2500 North Stemmons Freeway
201 Main Office Po Box 8035996
256 Main Office 99828 Routh Street, Suite 825.
但我不知道如何在单独的列中显示送货地址。 这样标题就变成了 “CustomerID、AddressType、MainOfficeAddress、ShippingAddress”。如问题所述,如果没有送货地址,请留空。
更新
如何在不使用“视图”的情况下做到这一点?我正在测试的网站不允许我创建视图...
我尝试过的
嗯,我尝试了不同的方法来实现这一点,其中一种是在 SELECT 语句中编写子查询:
SELECT c.CustomerID,
(
SELECT a.AddressLine1 FROM Address a
JOIN CustomerAddress ca
USING (AddressID)
WHERE ca.AddressType = 'Main Office'
) AS MainOfficeAddress
FROM CustomerAW c
;
然后我会收到错误消息“子查询返回超过 1 行”。
我也尝试过类似下面的方法(实际上都没有工作):
SELECT c.CustomerID, b.AddressLine1, e.AddressLine1
FROM CustomerAW c
JOIN
(
SELECT * FROM CustomerAddress ca
JOIN Address a
USING (AddressID)
WHERE ca.AddressType IN 'Main Office'
) AS b
USING (CustomerID)
JOIN
(
SELECT * FROM CustomerAddress ca
JOIN Address a
USING (AddressID)
WHERE ca.AddressType IN 'Shipping'
) AS e
USING (CustomerID)
;
还有:
SELECT c.CustomerID, AddressType, AddressLine1 AS MainOfficeAddress,
(
SELECT a.AddressLine1 FROM Address a
JOIN CustomerAddress ca USING (AddressID)
WHERE ca.CustomerID IN c.CustomerID
AND ca.AddressType = 'Shipping'
) AS ShippingAddress
FROM CustomerAW c
JOIN CustomerAddress ca
USING (CustomerID)
JOIN Address
USING (AddressID)
WHERE ca.AddressType IN ('Main Office')
AND City = 'Dallas'
;
非常感谢任何帮助!希望我不是在问一个愚蠢的问题。
【问题讨论】:
标签: mysql