如何根据截断的主键值进行查询?

时间:2013-07-08 19:15:09

标签: sql ms-access

我有两张桌子;一个表包含我的所有订单(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执行此操作,最好是。

3 个答案:

答案 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