【问题标题】:How to create a table out of the existing table?如何从现有表中创建表?
【发布时间】:2014-04-05 16:44:23
【问题描述】:

所以我有一个包含 AbstractID、SentenceID、WordID 和 Word 的大表。一些单词显示在多个文件中。我想计算每个单词显示多少个文件,然后用 Word 和 Count 创建一个新表。下面是我的一段数据。

我的sql查询如下:

CREATE TABLE WORDLIST(WORD, TOTALCOUNT) AS
(
  SELECT WORD FROM ASSIGNMENT2 WHERE
  (
    SELECT WORD, COUNT(*) FROM (select DISTINCT FILEID, WORD FROM ASSIGNMENT2)
    GROUP BY WORD ORDER BY COUNT(*) DESC));

这给了我一个错误: “错误报告: SQL 错误:ORA-00936:缺少表达式 00936. 00000 - “缺少表达式” *原因:
*行动:"

我该如何纠正这个问题?谢谢。

【问题讨论】:

    标签: oracle create-table


    【解决方案1】:

    您使查询过于复杂。错误是因为您的外部 where 子句没有条件;您正在选择多个事物,无论如何这都是不对的,但是不要将它们与任何事物进行比较。而且您不需要将查询括在一组括号中。

    你可以这样做:

    CREATE TABLE WORDLIST (WORD, TOTALCOUNT) AS
    SELECT WORD, COUNT(DISTINCT FILEID)
    FROM ASSIGNMENT2
    GROUP BY WORD;
    

    没有必要对查询进行排序,因为它不会影响未来对新表的查询 - 您仍然必须对这些查询进行排序,因为表中没有固有的行顺序。 (而且我认为 order by 会在 create-as 语句中导致错误,但无法立即检查)。

    创建一个表格来保存这些信息似乎很奇怪,因为它很快就会过时。也许你真的想要一个视图?

    【讨论】:

    • 我订购它是因为我想删除频率最高和最低的单词。
    • 现在它给了我这个错误信息:Error at Command Line:8 Column:14 Error report: SQL Error: ORA-00955: name is already used by an existing object 00955. 00000 - "name is already used by an existing object" *Cause: *Action: 我以前试过这样做,现在确定 SQL 是否已经创建了一个 WORDLIST 表。你知道我怎么检查这个吗?抱歉,我是新手。
    • @Q-ximi - 它不会根据您的问题创建表格,但也许您在此之前尝试过。检查select object_type, object_name from user_objects where object_name = 'WORDLIST',以防表以外的东西具有该名称;或者只是在 SQL*Plus 中使用describe wordlist 来查看当前表定义。如果你需要,并且你确定,你可以drop table wordlist。确保你知道你会放弃什么。
    • 在插入时排序不会帮助您找到最高和最低频率。
    • 看起来我已经创建了表,但我不知道它在哪里。我尝试使用不同的表名WORDCOUNT,这一次它给了我一个新的错误:Error report: SQL Command: table WORDCOUNT Failed: Warning: execution completed with warning
    猜你喜欢
    • 2022-01-11
    • 2021-10-03
    • 2021-06-23
    • 1970-01-01
    • 2011-01-31
    • 1970-01-01
    • 1970-01-01
    • 2020-09-07
    相关资源
    最近更新 更多