0

my tables

DESC emp

Name                           Null     Type
------------------------------ -------- --------------------------
EMP_NO                                  NUMBER
EMP_NAME                                VARCHAR2(10)
ADDRESS                                 VARCHAR2(15)
PH_NO                                   NUMBER(10)
DEPT_NO                                 NUMBER

result:

1   ram ctr 8892939927  100
2   mohan   ptr 7569936347  101
3   mallu   ppt 9553438342  102
4   scoot   dmc 9874563210  103
5   jim plr 9236548875  104
6   ravi    tpt 8562398756  105
7   manju   hyd 7562398742  106
8   manoj   hyd 869523654   107
9   sarath  ctr 9632158769  108
10  hemanth mpk 9632147852  109


desc salary

Name                           Null     Type
------------------------------ -------- --------------------------
EMP_NO                                  NUMBER
SALARY                                  NUMBER(10)
PERIOD                                  VARCHAR2(10)
START_DATE                              DATE
END_DATE                                DATE

result:

1   12580   15months    12-DEC-07   10-DEC-10
2   15500   19months    10-JAN-07   10-DEC-11
3   7777    18months    11-JUL-07   21-APR-11
4   9999    11months    07-JUL-07   31-JAN-11
5   8500    9months         12-MAR-07   27-MAR-11
6   10000   20months    17-SEP-07   01-AUG-11
7   25000   7months         17-NOV-07   26-JUL-11
8   100000  6months         05-MAY-07   21-JUN-11
9   35000   16months    28-FEB-08   21-JUN-11
10  5000    16months    02-DEC-08   19-AUG-11

joinning query :

select emp_no,
       emp_name,
       dpt_no,
       salary 
from emp 
   join salary on emp.dpt_no=salary.dpt_no

but am getting error is"column is amguously defined". How to resolve this problem?

4

2 回答 2

0

如果表中的列名相同(salary 和 emp)并且您要加入表,则必须指定要选择列的表(salary 或 from emp)

在你的情况下,解决方案是使用salary.dpt_no而不是dpt_no

select emp_no,emp_name,salary.dpt_no,salary from emp join emp.dpt_no=salary.dpt_no 上的薪水

于 2013-08-06T06:17:10.507 回答
0

您需要完全限定选择列表中的列(在JOIN条件中完成的方式)。否则 Oracle 将不知道应该从哪个表中获取该列dept_no

select emp.emp_no,
       emp.emp_name,
       emp.dpt_no,  
       salary.salary 
from emp 
   join salary on emp.dpt_no=salary.dpt_no;

始终限定列是一种很好的编码风格- 至少在涉及多个表的查询中 - 即使它们不是模棱两可的。

如果你不想输入完整的表名,你可以使用(maningful)别名:

select emp.emp_no,
       emp.emp_name,
       emp.dpt_no,  
       sal.salary, 
       sal.period
from emp 
   join salary sal 
     on emp.dpt_no = sal.dpt_no;
于 2013-08-06T06:17:26.833 回答