我有两张桌子;一个表包含我的所有订单(ORDERS),另一个表是城市列表(CITY)。
任何给定订单的OrderID的前6位数是根据订单来源的城市生成的。
CITY表在左栏中只有六位数代码,在右边只有一个城市名称。
我想要做的是创建一个查询,通过比较OrderID的前6位数字和CITY表来提取城市名称。
示例:
ORDER
OrderID Customer Name Date
11111135465 David Summerhill 09/28/2011
44444435463 Margaret Jefferson 06/17/2013
55555548635 Matthew Cunningham 07/07/2012
22222265437 David Summerhill 07/08/2013
CITY
ID City Name
111111 New York
222222 Detroit
333333 San Jose
444444 Houston
555555 Seattle
666666 Phoenix
结果:
Customer Name Date City
David Summerhill 09/28/2011 New York
Margaret Jefferson 06/17/2013 Houston
Matthew Cunningham 07/07/2012 Seattle
David Summerhill 07/08/2013 New York
虽然我正在使用MS Access,但我想知道如何使用标准SQL执行此操作,最好是。
答案 0 :(得分:2)
如果城市ID是字符串,您可以在LEFT()
中使用JOIN
:
SELECT [Customer Name], Date, [City Name]
FROM ORDER
JOIN CITY
ON LEFT(OrderID,6) = City.ID
如果城市代码是整数,请使用其他响应之一。
答案 1 :(得分:1)
我会选择使用状态的计算列来制作实际的外键引用,或者我会使用sargable谓词。当您在谓词的列上使用函数时,它可以限制索引搜索。
这样的事情对你有用。
SELECT
O.CustomerName,
[Date]= CONVERT(VARCHAR(12),O.Date,101),
c.CityName
FROM Orders o
INNER JOIN Cities c
ON o.OrderID LIKE CAST(c.ID AS CHAR(6)) + '%'
答案 2 :(得分:0)
SELECT Customer_Name, Date, City
FROM Order
JOIN City
ON City.ID = OrderID DIV 100000