所有的晚上(我们中的一些人早上),
首先,我是 SQL 的新手,您可以从以前的帖子中看出这一点。我正在尝试自学,这很困难,但同时又有趣又有益。
我正在弄乱我创建的现有表,我想弄清楚如何将两个表组合成一个查询,首先按升序对一列进行排序,然后按字母顺序对另一列进行排序。
我的客户表包含 4 行、3 列(客户 ID、客户名称、客户地址 ID),我的第二个表地址包含 4 行和 5 列(地址 ID、街道、城市、州、邮政编码)
我已经尝试了几种方法来做到这一点,但我遇到了一些问题。
SELECT [CustomerName],[Street],[City],[State],[ZipCode]
FROM Customer,Address
ORDER BY ZipCode ASC, CustomerName;
上面的代码将所有内容组合成一个结果,这太棒了,但我最终得到了 16 行。前 4 行按字母顺序显示 CustomerName,这正是我想要的。然而,其余列都是重复的。我附上了我两次尝试查询正确数据的屏幕截图。
请注意,我将主键设置为 AddressID、CustomerID 并将外键设置为 CustomerAddressID。我不确定这些是否需要包含在我的查询中以帮助对信息进行排序。
为了解决这个问题,我已经受够了用头撞墙。我已经查阅了几乎所有我能找到的指南,但我似乎无法让它发挥作用。
如有任何指导,我们将不胜感激。
谢谢,
杰森
编辑**(这是我对数据的原始 INSERT 语句)
INSERT INTO [dbo].[Address]
([AddressID]
,[Street]
,[City]
,[State]
,[ZipCode])
VALUES
(1,'2400 Broadway','New York','NY',11201),
(2,'320 21st Street','Atlanta','GA',30322),
(3,'439 Skyline Blvd','Seattle','WA',98101),
(4,'56 Park Avenue','Dallas','TX',75201);
GO
INSERT INTO [dbo].[Customer]
([CustomerID]
,[CustomerName]
,[CustomerAddressID])
VALUES
(1,'Western Supply Co.',2),
(2,'Jake Harper',4),
(3,'Elizabeth Harper',1),
(4,'Abacus Consulting',3);
GO
编辑 2*
感谢 Ughai 的快速帮助。我玩了它并弄明白了。现在完美运行:
SELECT Customer.CustomerName, Address.Street, Address.City, Address.State, Address.ZipCode
FROM Customer
INNER JOIN Address
ON Customer.CustomerAddressID=Address.AddressID
ORDER BY ZipCode ASC, CustomerName ASC;
最佳答案
您编写了一个仅执行交叉连接的查询。 尝试以下查询以获得正确的结果。
SELECT C.CustomerName, A.Street, A.City, A.State, A.ZipCpde
FROM Customer C
INNER JOIN Address A
ON C.CustomerAddressID = A.AddressID
ORDER BY A.ZipCode ASC, C.CustomerNAme;
当您想从两个或多个表中获取结果时,您总是使用 JOIN。 JOIN 子句总是返回简洁的结果。
关于mysql - 通过查询编辑器对表进行排序并接收重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30497353/