-2

我有两张桌子;一个表包含我所有的订单 (ORDERS),另一个是城市列表 (CITY)。

任何给定订单的 OrderID 的前 6 位数字都是根据订单的来源城市生成的。

CITY 表的左列只有一个六位数代码,右列是城市名称。

我想做的是创建一个查询,允许我通过将 OrderID 的前 6 位数字与 CITY 表进行比较来提取城市名称。

例子:

命令

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

城市

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 来做到这一点,最好是。

4

3 回答 3

2

如果城市 ID 是字符串,您可以LEFT()在您的中使用:JOIN

SELECT [Customer Name], Date, [City Name]
FROM ORDER
JOIN CITY
 ON LEFT(OrderID,6) = City.ID

如果城市代码是整数,请使用其他响应之一。

于 2013-07-08T19:17:35.200 回答
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)) + '%'
于 2013-07-08T19:28:52.500 回答
0
SELECT Customer_Name, Date, City
FROM Order
JOIN City
ON City.ID = OrderID DIV 100000
于 2013-07-08T19:19:23.600 回答