我有两个表A和B,并尝试通过sql INNER JOIN
选择它们,但我遇到了这个错误:
ORA-00918:列模糊定义
我想这是因为有两列'这两个表中的名称相同,即A.column1
,B.column1
和A.column2
以及B.column2
(这两列&A;和A中的名称相同) 。由于这两个表存储在服务器中,因此无法重命名列。那我该怎么办?
这是我使用的代码:
Select * FROM A INNER JOIN B WHERE A.column1 = B.column1.
我该如何解决?
答案 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