在SQL查询中创建临时表时,我不断收到错误消息,指出我的SELECT命令未正确结束。我正在尝试编写的实际查询列出了库分支ID和该库中“创新者之路”的副本数量。
表BOOK_COPIES具有分别与表LIBRARY_BRANCH和BOOK相关的外键Branch_id和Book_id。标题是BOOK的一个属性。
我写的查询是:
SQL> SELECT Book_id , Branch_id , No_of_copies
2 INTO COPIES_AT_BRANCH
3 FROM BOOK_COPIES , LIBRARY_BRANCH
4 GROUP BY Branch_id
5 SELECT Title , Branch_id , No_of_copies
6 INTO BOOK_NO
7 FROM COPIES_AT_BRANCH , BOOK
8 GROUP BY Book_id
9 SELECT Branch_id , No_of_copies
10 FROM BOOK_NO
11 WHERE Title = 'The Innovator''s Way';
我得到的错误是:
SELECT Title , Branch_id , No_of_copies
*
ERROR at line 5:
ORA-00933: SQL command not properly ended
我对SQL和数据库一般都很陌生,所以我的错误可能非常简单。此外,查询通常可能不正确。
感谢任何帮助,谢谢。
答案 0 :(得分:3)
您有多个SELECT
个查询,但这些查询并非以分号;
结尾。试试这个:
SQL> SELECT Book_id , Branch_id , No_of_copies
2 INTO COPIES_AT_BRANCH
3 FROM BOOK_COPIES , LIBRARY_BRANCH
4 GROUP BY Branch_id;
5 SELECT Title , Branch_id , No_of_copies
6 INTO BOOK_NO
7 FROM COPIES_AT_BRANCH , BOOK
8 GROUP BY Book_id;
9 SELECT Branch_id , No_of_copies
10 FROM BOOK_NO
11 WHERE Title = 'The Innovator''s Way';
答案 1 :(得分:1)
除了半冒号问题之外,您会发现由于前两个语句中的INTO
子句,您的语句将失败。
在Oracle中,INTO
在编写PL / SQL代码时在SQL查询中有效。但根据您的评论,听起来您实际上要做的是根据select
语句的结果创建一个表。该语法可能适用于其他数据库,如SQL Server,但它在Oracle中不起作用。
您要使用的语法是:
create table table_name as select ...
此外,您还需要了解如何在FROM
子句中加入表格。您不仅使用较旧的语法来执行连接(请查看ANSI JOIN
语法),而且您似乎也在执行cross join
,这将为您提供2个表的笛卡尔积。这很少是一件好事。你可能想看一下。