0

我们有一个数据库,其中有一个名为 Students 的表,其中包含 id、name、age、school 列。

现在我想编写一个迁移脚本来将 3 列(假设我有数百万条记录)从 Student 表复制到 New_students 表。

下面是我编写的示例脚本。它抛出一个错误

CREATE TABLE IF NOT EXISTS New_Students (
id PRIMARY KEY,
name string,
age string,
)

INSERT INTO New_Students(id,name,age)
SELECT  id,name,age
FROM students;

在 crateDb Admin UI 中执行上述操作时,出现以下错误

SQLActionException[SQLParseException: line 8:1: mismatched input 'INSERT' expecting <EOF>]

上述语句在单独执行时有效。

问题:

  1. 为什么上面的多个语句不起作用,但单独键入时起作用?2.我们如何将数据从表列复制到另一个新表。假设我有数百万条记录,我如何更有效地做到这一点?
4

4 回答 4

2

CrateDB AdminUI 的 SQL 控制台不支持多条语句。

您可以改用crashCLI 工具,它确实支持多个语句,请参阅https://crate.io/docs/clients/crash/en/latest/

于 2019-01-24T12:39:25.913 回答
0

在创建表语句后加分号

CREATE TABLE IF NOT EXISTS New_Students (
id int PRIMARY KEY,
name varchar(100),
age varchar(100) -- you need to remove this line coma as well 
);

INSERT INTO New_Students(id,name,age)
SELECT  id,name,age
FROM students;
于 2019-01-24T09:05:25.387 回答
0
  1. 正如您所说的那样,当您分开查询时,单个请求中只有一条语句有效,因此您确实需要执行两条语句。

  2. 即使有数百万条记录,它仍然是一条语句,所以效率不重要吗?您只需运行 1 个单独的脚本来创建一个新表,插入将按预期工作,无论它可能需要多长时间。

于 2019-01-24T09:38:54.347 回答
0

为什么不直接从数据中创建表呢?

CREATE TABLE New_Students as
    SELECT id, name, age
    FROM students;

您的问题是只允许您一次发送声明的界面。但是,在这种情况下,您可能不需要两个语句。

于 2019-01-24T11:58:47.147 回答