【发布时间】:2016-09-29 01:46:08
【问题描述】:
我有一个任务,我必须创建两个名为 Customer 和 Address 的表。这些表位于名为 HandsOnOne 的数据库中。
客户 的列标题为:
CustomerID、CustomerName、CustomerAddressID
Address 的列标题为:
AddressID、Street、City、State、ZipCode
存在外键关系,其中Address表中的AddressID是主键,Customer表中的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 件商品。
下一个问题要求我列出没有客户关联的所有地址的Street、City、State 和ZipCode。
此查询应返回320 的地址21st St Billings,MT 59101,因为它的 AddressID 值是 2 并且在 2 中没有 CustomerAddressID 值地址表。但是,当我执行此查询时,我没有收到任何结果。
我已验证存在外键关系。我做错了什么?
【问题讨论】:
-
既然JohnHC已经给出了答案,我会补充一点:当我开始使用连接时,下图对我有很大帮助:) 3.bp.blogspot.com/-bC-tThYQxxU/UZy6wVYiZeI/AAAAAAAAAjM/…
-
@DenStudent 我的墙上也有一个类似的
-
Bad habits to kick : using old-style JOINs - 旧式 逗号分隔的表格列表 样式已替换为 ANSI 中的 proper ANSI
JOIN语法-92 SQL 标准(20 多年前),不鼓励使用它 -
天哪,这看起来很眼熟...sqlservercentral.com/Forums/Topic1821764-3077-1.aspx
标签: sql sql-server