SELECT INTO和"Undeclared variable"错误

hsz*_*hsz 40 mysql select-into

当我尝试执行以下查询时:

SELECT id_subscriber
  INTO newsletter_to_send
  FROM subscribers 
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

#1327 - 未声明的变量:newsletter_to_send

该查询有什么问题?

zer*_*kms 48

INSERT ... SELECT
Run Code Online (Sandbox Code Playgroud)

http://dev.mysql.com/doc/refman/5.1/en/insert-select.html

INSERT INTO newsletter_to_send
SELECT id_subscriber FROM subscribers 
Run Code Online (Sandbox Code Playgroud)

PS:你确定你不需要in WHERE子句吗?

  • 实际上,我更多地提到了它,因为如果select ... into语法表将会被创建,如果它不存在,但插入它不是这样. (6认同)
  • 对于使用insert,我们需要先创建表,在这种情况下如果表newsletter_to_send不存在,就会出错! (3认同)

Raj*_*ore 21

MySQL不支持SELECT ... INTO ...语法.

你必须使用INSERT INTO ... SELECT ..语法来完成那里.

在这里阅读更多内容.. http://dev.mysql.com/doc/refman/5.0/en/insert-select.html


小智 16

我认为你可以按照我的方式,希望你能够解决你的问题.

首先使用此sql命令创建要在其中进行备份的新表

CREATE TABLE destination_table_name LIKE source_table_name;
Run Code Online (Sandbox Code Playgroud)

之后,您可以使用此命令复制这些数据

INSERT INTO destination_table_name
SELECT * FROM source_table_name;
Run Code Online (Sandbox Code Playgroud)

如果您的目标表中已有先前的数据,则首先可以使用此命令

TRUNCATE TABLE destination_table_name; 
Run Code Online (Sandbox Code Playgroud)

谢谢Md.Maruf Hossain


小智 11

CREATE TABLE table_name
AS  
SELECT ...(your select)
Run Code Online (Sandbox Code Playgroud)

  • 嗯...这更好,特别是如果您不知道(或者您不想写)所有列的名称 (2认同)

amp*_*ine 10

MySQL不支持SELECT INTO [table].它只支持SELECT INTO [variable]并且一次只能执行一个变量.

但是你可以做的是使用类似的CREATE TABLE语法SELECT:

CREATE TABLE bar ([column list]) SELECT * FROM foo;
Run Code Online (Sandbox Code Playgroud)

  • 这个例子很好,允许 mysql 通过自动创建表来执行 SELECT ... INTO ... 的等效操作 (2认同)

小智 5

我刚才尝试过这个,这对我有用:

CREATE TABLE New_Table_name
SELECT * FROM Original_Table_name;
Run Code Online (Sandbox Code Playgroud)