我正在尝试使用join但面临此问题。我已通过了我的查询
select count(*) from table_a inner
join table_b on table_a.number = table_b.number
left outer join table_c on table_a.id = table_c.id
and table_a.number = table_c.number
order by number;
请告诉我查询中的错误...
-Vinod
答案 0 :(得分:1)
您是作为INSERT还是DELETE的一部分执行此查询? 如果是这样,请删除ORDER BY。无论如何都不需要它。
错误:ORA-00933:SQL命令没有 正确结束
原因:你试过 用一个执行SQL语句 不合适的条款。
行动: 解决此Oracle错误的选项 是:
您可能已经执行了INSERT 带有ORDER BY子句的声明。至 解决此问题,删除ORDER BY 子句并重新执行INSERT 声明。例如,你试过 执行以下INSERT 语句:
INSERT INTO supplier (supplier_id, supplier_name) VALUES (24553, 'IBM') ORDER BY supplier_id;
您可以更正INSERT语句 删除ORDER BY子句为 如下:
INSERT INTO supplier (supplier_id, supplier_name) VALUES (24553, 'IBM');
您可能尝试过执行DELETE 带有ORDER BY子句的声明。至 解决此问题,删除ORDER BY 子句并重新执行DELETE 声明。例如,你试过 执行以下DELETE 语句:
DELETE FROM supplier WHERE supplier_name = 'IBM' ORDER BY supplier_id;
您可以更正DELETE语句 删除ORDER BY子句为 如下:
DELETE FROM supplier WHERE supplier_name = 'IBM';
答案 1 :(得分:1)
您是如何执行此查询的?
在Oracle SQL中,没有像“;”这样的语句分隔符。那个只用在PL / SQL中,当你用“;”分隔它们时,一些工具允许你在文件/编辑器中放置多个语句。只有这样他们才能分别执行它们。
长话短说:删除“;”然后再试一次。 哦,下次,告诉我们你是如何运行查询的。我们必须检查我们的水晶球,猜猜你的问题是什么。
答案 2 :(得分:1)
当您将查询转录到此处出现的anodyne测试用例时,您无意中纠正了该问题。好吧,你介绍了一个ORA-00918错误,但一旦修复,代码运行正常......
SQL> create table table_a (col_1 number, id number)
2 /
Table created.
SQL> create table table_b (col_1 number)
2 /
Table created.
SQL> create table table_c (col_1 number, id number)
2 /
Table created.
SQL>
SQL>
SQL> select count(*) from
2 table_a inner join table_b on table_a.col_1 = table_b.col_1
3 left outer join table_c on table_a.id = table_c.id
4 and table_a.col_1 = table_c.col_1
5 order by col_1
6 /
order by col_1
*
ERROR at line 5:
ORA-00918: column ambiguously defined
SQL> select count(*) from
2 table_a inner join table_b on table_a.col_1 = table_b.col_1
3 left outer join table_c on table_a.id = table_c.id
4 and table_a.col_1 = table_c.col_1
5 order by table_a.col_1
6 /
COUNT(*)
----------
0
SQL>
注意:我已将COL_1
替换为NUMBER
作为列名。我不认为这是你的问题,因为在查询中使用未转义的NUMBER会输入ORA-1747而不是ORA-00933。
所以,让我们排除显而易见的事实:你是否运行了一个不支持ANSI连接语法的古老版本的Oracle,即8i或更早?
答案 3 :(得分:1)
您无法通过无法包含在结果集中的值进行排序。您的结果集将多行(每个行都有自己的NUMBER值)聚合到一行中。因此,顺序不具有逻辑意义。在这种情况下,您的查询只返回一行,因此ORDER BY无关紧要。