sql join ORA-00918:列模糊定义

时间:2016-10-20 12:05:29

标签: sql oracle

我有两个表A和B,并尝试通过sql INNER JOIN选择它们,但我遇到了这个错误:

  

ORA-00918:列模糊定义

我想这是因为有两列'这两个表中的名称相同,即A.column1B.column1A.column2以及B.column2(这两列&A;和A中的名称相同) 。由于这两个表存储在服务器中,因此无法重命名列。那我该怎么办?

这是我使用的代码:

Select * FROM A INNER JOIN B WHERE A.column1 = B.column1.

我该如何解决?

4 个答案:

答案 0 :(得分:0)

我建议你"修复" select。例如:

SELECT A.*, B.col2, B.col3
FROM A INNER JOIN
     B 
     ON A.column1 = B.column1;

但是,您也可以使用USING子句。因此,如果命名冲突是column1,那么:

SELECT *
FROM A INNER JOIN
     B 
     USING (column1);

只会返回一次。

答案 1 :(得分:0)

表a和表b中的一个或多个列名相同。 避免在sql语句中使用*并使用每个表的表前缀(如A。*)。

答案 2 :(得分:0)

尝试使用别名..例如在你的情况下使用

SELECT * from A as TABLE1 INNER JOIN B AS TABLE2 ON TABLE1.COLUMN = TABLE2.COLUMN

答案 3 :(得分:0)

您使用的是哪个版本的Oracle?这在12c中运行良好:

resolvers += Resolver.url("me @ bintray", url("https://dl.bintray.com/{my-bintray-account}/{my-bintray-generic-repo}"))(Resolver.ivyStylePatterns)

当然,如果您尝试在PL / SQL中使用该SQL,则可能遇到问题,例如

SQL> create table t1 (c1 int, c2 int);

Table created.

SQL> create table t2 (c1 int, c2 int);

Table created.

SQL> insert into t1 values (1, 1);

1 row created.

SQL> insert into t2 values (1, 2);

1 row created.

SQL> select * from t1 join t2 on t1.c1 = t2.c1;

        C1         C2         C1         C2
---------- ---------- ---------- ----------
         1          1          1          2