SQL查询语句显示具有多个表的相同列类型

时间:2013-03-09 00:01:51

标签: sql select sql-view

我有一个表格视图,它尝试获取两个整数国家/地区代码(来源和目的地),并将这些整数代码替换为实际的双字母国家/地区代码,同时保留第二个表格的映射。

以下是两个表的示例

国家/地区代码:

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查询做的事情吗?第二个是有一个很好的例子或网站可以解释我如何能够实现这样的结果。

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:0)

您需要为两个查阅列中的每一个加入国家/地区代码表:

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

[注意:如果origindestination列可以为空,则可以使用左连接而不是内连接

答案 1 :(得分:0)

您只需要两个单独的JOIN:

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

答案 2 :(得分:0)

好的,您正在尝试创建一个查询,通过将每个origindestination组件替换为相应的两位数国家/地区代码来“填充”Zones表中的每条记录。换句话说,您正在解码原始和目标数据。您可以在区域表上执行两次加入:一次填写原点,第二次填写目的地。

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

  1. 通过将Zones表与Country Codes表连接来解码原点。 例如

    SELECT *
    FROM Zones, Country Codes
    WHERE origin = integerCode
    

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

    (origin,destination,col3,col4,integerCode,twoDigitCode,fullName)

  2. 使用相同的过程解码目标。也就是说,再次将从步骤1创建的表与Country Codes表一起加入,但这次WHERE子句应该将目标与integerCode匹配。

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