【问题标题】:Need help in SQL join在 SQL 连接方面需要帮助
【发布时间】:2015-10-01 11:41:45
【问题描述】:

我有两张表如下:

表:员工

employeeid  code_one    code_two
101          17112       17112
102          17113       17112
103          17114       17112
104          17115       16800
106          17116       17112
107          17117       18000
108          17118       17112

表格:代码

codeid  codename
17112   200TS
17113   400TS
17114   100TS
17115   500TS
17116   620TS
17117   899TS
17118   900TS
16800   888TS
18000   912TS

我需要这样的输出: 输出

employeeid  code_one    code_two
101         200TS       200TS
102         400TS       200TS
103         100TS       200TS
104         500TS       888TS
106         620TS       200TS
107         899TS       912TS
108         900TS       200TS

我需要将员工表中的代码 ID 与代码表中对应的代码名称进行映射。请帮我。

【问题讨论】:

    标签: sql oracle join oracle11g inner-join


    【解决方案1】:

    您需要joincode 表两次。

    SELECT E.employeeid,
           C.codename  AS code_one,
           C1.codename AS code_two
    FROM   Employee E
           INNER JOIN Code C
                   ON E.code_one = c.code
           INNER JOIN Code c1
                   ON E.code_two = c.code 
    

    【讨论】:

    • Oracle 中的语法不正确。 AS 关键字不用于表别名。
    【解决方案2】:

    您只需要正确连接表格即可。

    表格数据

    SQL> SELECT * FROM employee;
    
    EMPLOYEEID   CODE_ONE   CODE_TWO
    ---------- ---------- ----------
           101      17112      17112
           102      17113      17112
           103      17114      17112
           104      17115      16800
           106      17116      17112
           107      17117      18000
           108      17118      17112
    
    7 rows selected.
    
    SQL> SELECT * FROM code;
    
        CODEID CODENAME
    ---------- --------
         17112 200TS
         17113 400TS
         17114 100TS
         17115 500TS
         17116 620TS
         17117 899TS
         17118 900TS
         16800 888TS
         18000 912TS
    
    9 rows selected.
    

    查询

    使用 Oracle 连接语法:

    SQL> column code_one format a8
    SQL> column code_two format a8
    SQL> SELECT E.employeeid,
      2    C1.codename AS code_one,
      3    C2.codename AS code_two
      4  FROM Employee e,
      5    code c1,
      6    code c2
      7  WHERE E.code_one = c1.codeid
      8  AND E.code_two   = c2.codeid
      9  /
    
    EMPLOYEEID CODE_ONE CODE_TWO
    ---------- -------- --------
           108 900TS    200TS
           106 620TS    200TS
           103 100TS    200TS
           102 400TS    200TS
           101 200TS    200TS
           104 500TS    888TS
           107 899TS    912TS
    
    7 rows selected.
    
    SQL>
    

    使用 ANSI 连接语法:

    SQL> SELECT E.employeeid,
      2    C1.codename AS code_one,
      3    C2.codename AS code_two
      4  FROM Employee e
      5  INNER JOIN code c1
      6  ON E.code_one = c1.codeid
      7  INNER JOIN code c2
      8  ON E.code_two = c2.codeid
      9  /
    
    EMPLOYEEID CODE_ONE CODE_TWO
    ---------- -------- --------
           108 900TS    200TS
           106 620TS    200TS
           103 100TS    200TS
           102 400TS    200TS
           101 200TS    200TS
           104 500TS    888TS
           107 899TS    912TS
    
    7 rows selected.
    
    SQL>
    

    【讨论】:

    • 从不向任何人建议老式逗号分隔加入。始终使用正确的 INNER JOIN 语法
    • @Fireblade 好吧,这是使用 Oracle 数据库时的一个旧习惯。无论如何,添加了 ANSI 语法,谢谢。
    • 我需要查询mssql服务器。
    • @curiousboy 那你为什么要标记oracle?顺便说一句,NASI 语法也应该适用于sql server。你试过了吗?
    • @downvoter 我可以知道投反对票的原因吗?解决方案正是 OP 想要的。
    猜你喜欢
    • 2012-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-11
    • 1970-01-01
    • 1970-01-01
    • 2011-07-02
    相关资源
    最近更新 更多