2

我有一个表格视图,它尝试采用两个整数国家代码(起点和目的地)并将这些整数代码替换为实际的两个字母国家代码,同时保持第二个表的映射。

这是两个表的示例

国家代码:

integerCode twoDigitCode   fullName
     0           US      United States
     1           BE        Belgium
     2           CN         China
     ...

区域:

origin destination col3 col4
   0        1       x    y
   0        2       z    a
   1        2       u    b
   2        0       x    x
   2        1       i    f
   ...

我想要做的是在视图中得到这样的结果:

origin destination col3 col4
  US        BE       x   y
  US        CN       z   a
  ...

我已经尝试了几个不同的 SQL 查询,像这样

SELECT twoDigitCode as origin, twoDigitCode as destination
FROM country INNER JOIN Zone ON zone.destination = country.twoDigitCode 
WHERE zone.origin = country.twoDigitCode 

但它似乎只是不断重复两次查找的结果。

我的第一个问题是我什至可以用 SQL 查询做我想做的事情吗?第二个是有一个很好的例子或网站可以解释我如何获得这样的结果。

任何帮助将不胜感激。

4

3 回答 3

0

You simply need two separate JOINs:

SELECT c1.twoDigitCode origin, c2.twoDigitCode destination, z.col3, z.col4
FROM Zones z
JOIN Country c1 ON c1.integer.code=z.origin
JOIN Country c2 ON c2.integer.code=z.destination
于 2013-03-09T00:09:05.207 回答
0

好的,您正在尝试创建一个查询,该查询将通过用相应的两位国家代码替换每个originand组件来“填充” Zones 表中的每条记录。destination换句话说,您正在解码源数据和目标数据。您可以在 Zones 表上执行两次 Join:一次填写源,第二次填写目标。

您可以将其分解为两个查询:

  1. 通过将 Zones 表与 Country Codes 表连接起来对来源进行解码。例如

    SELECT *
    FROM Zones, Country Codes
    WHERE origin = integerCode
    

    这将创建一个临时表,其中每行包含以下列:

    (起点、终点、col3、col4、integerCode、twoDigitCode、fullName)

  2. 使用相同的过程解码目的地。也就是说,再次将第 1 步创建的表与 Country Codes 表连接起来,但这次 WHERE 子句应将目标与 integerCode 匹配。

免责声明:我是学生,不是专家。我不声称我的解决方案的效率、准确性或正确性。

于 2013-03-09T01:30:20.203 回答
0

您需要为 2 个查找列中的每一个加入国家代码表:

SELECT co.twoDigitCode as origin, cd.twoDigitCode as destination, z.col3, z.col4
FROM zones z
INNER JOIN country co ON country.integerCode = z.origin
INNER JOIN country cd ON country.integerCode = z.destination

[注意:如果originanddestination列可以为空,您将使用左连接而不是内连接]

于 2013-03-09T00:06:17.347 回答