繁体   English   中英

SQL帮助从两个表中选择客户信息

[英]SQL help selecting customer information from two tables

我有一个作业,必须创建两个名为CustomerAddress的表。 这些表位于一个名为HandsOnOne的数据库中。

客户具有标题为: CustomerIDCustomerNameCustomerAddressID

地址的标题为: AddressIDStreetCityStateZipCode

有其中一个外键关系AddressID地址表的主键和CustomerAddressID客户表是外键。

我使用以下代码在每个表中插入值:

USE HandsOnOne;

INSERT INTO Address (AddressID, Street, City, State, ZipCode)    
VALUES (1, '2400 Broadway Drive', 'Missoula', 'MT', '59802'),
(2, '320 21st Street', 'Billings', 'MT', '59101'),    
(3, '439 Skyline Blvd', 'Denver', 'CO', '80002'),    
(4, '56 Park Avenue', 'New York', 'NY', '10001');

USE HandsOnOne;

INSERT INTO Customer (CustomerID, CustomerName, CustomerAddressID)
VALUES (1, 'Western Supply Company', 1),    
(2, 'Nick Harper', 3),
(3, 'Alice Harper', 3),
(4, 'Abacus Consulting', 4);

从那里,我必须根据某些规范进行排序。 第一个规范是列出所有城市和州的客户,按ZipCode升序排列,然后按CustomerName升序排列。

这是我用于此部分的代码:

USE HandsOnOne;

SELECT CustomerName, City, State    
FROM Customer, Address
ORDER BY ZipCode ASC, CustomerName ASC;

当我执行此代码时,我的回报是16个项目而不是4个项目。不知何故,每个客户都被分配了每个地址,每个地址给我4个项目。

下一个问题要我列出所有地址的StreetCityStateZipCode ,而没有与之相关的客户。
因为它的这个查询将返回320个21个圣比林斯 ,MT 59101的地址AddressID值为2,没有CustomerAddressID 2地址表中的值。 但是,执行此查询时没有收到任何结果。

我已经证实存在外键关系。 我究竟做错了什么?

您并没有限制加入。 此外,大多数DBMS(尤其是SQL Server的最新版本)不再支持隐式Inner Join ,因此最好使用显式的Inner Join

尝试这个:

select CustomerName, City, State
from Customer 
inner join Address 
    on AddressID = CustomerAddressID -- I assume this is the foreign key
order by ZipCode asc, CustomerName asc

啊,问题2(由于格式化而被忽略)

select A1.*
from Address A1
left join Customer C2
    on A1.AddressID = C2.CustomerAddressID
where C2.CustomerAddressID is null

关于第二个问题:使用NOT EXISTS来获得没有客户的所有地址。 见下文:

SELECT *
FROM   Address A
WHERE NOT EXISTS (SELECT 1
                  FROM   Customer C
                  WHERE  C.CustomerAddressID = A.AddressID)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM