2015-07-13 53 views
3

我有如下两个表:在SQL需要帮助加盟

表:员工

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与代码表中的相应代码名称。请帮帮我。

回答

-1

你只需要正确地加入表格。

表数据

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. 

查询

使用甲骨文联接语法:

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> 
+3

**从来没有**建议*旧式逗号分隔连接*给任何人。始终使用适当的** INNER JOIN **语法 –

+0

@Fireblade嗯,在使用Oracle数据库时,这是一个老习惯。无论如何,添加ANSI语法,谢谢。 –

+0

我需要查询mssql服务器。 – curiousboy

3

您需要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 
+0

Oracle在语法上不正确。 'AS'关键字不用于表格别名。 –

+0

哎呀这里有什么错 –

+0

@LalitKumarB谢谢你更新 –