【问题标题】:SELECT INTO and "Undeclared variable" errorSELECT INTO 和“未声明的变量”错误
【发布时间】:2011-02-26 08:07:18
【问题描述】:

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

SELECT id_subscriber
  INTO newsletter_to_send
  FROM subscribers 

我收到一个错误:

#1327 - 未声明的变量:newsletter_to_send

那个查询有什么问题?

【问题讨论】:

    标签: mysql select-into


    【解决方案1】:
    INSERT ... SELECT
    

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

    INSERT INTO newsletter_to_send
    SELECT id_subscriber FROM subscribers 
    

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

    【讨论】:

    • 使用insert into需要先创建表,这种情况下如果newsletter_to_send表不存在,就会报错!
    • @Praveen Kumar:很明显,您需要一台服务器,安装 mysql 并创建表,不是吗?
    • 其实我提到的更多,因为 for select ...into 语法表如果不存在就会创建,但是 insert into 它不是这样。
    • @Praveen Kumar: "select ...into syntax" --- 文档中有参考吗?我不知道这种语法。
    • 你能帮我解决这里的问题吗stackoverflow.com/questions/43987326/…
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      MySQL 服务器不支持 SELECT ... INTO TABLE Sybase SQL 扩展。相反,MySQL Server 支持 INSERT INTO ... SELECT 标准 SQL 语法,这基本上是一样的。请参见第 12.2.5.1 节,“INSERT ... SELECT 语法”。

      参考:-this

      【讨论】:

        【解决方案4】:

        MySQL 不支持SELECT INTO [table]。它只支持SELECT INTO [variable],一次只能做一个变量。

        可以做的就是使用CREATE TABLE 语法和SELECT,如下所示:

        CREATE TABLE bar ([column list]) SELECT * FROM foo;
        

        【讨论】:

        • 这个例子很好,它允许mysql通过自动创建一个表来做相当于SELECT ... INTO ...
        • 至少对于最新版本的 MySQL,您可以在一个 SELECT [values] INTO [variables] 语句中为多个变量分配多个值。检查dev.mysql.com/doc/refman/5.7/en/select-into.html
        【解决方案5】:

        MySQL 不支持SELECT INTO [table]。它只支持SELECT INTO [variable],一次只能做一个变量。

        不过,您可以使用 CREATE TABLE 语法和 SELECT,如下所示:

        【讨论】:

          【解决方案6】:

          我认为您可以按照我的方式进行操作,希望您能够解决您的问题。

          首先使用此sql命令创建一个要备份的新表

          CREATE TABLE destination_table_name LIKE source_table_name;
          

          然后你可以使用这个命令来复制那些数据

          INSERT INTO destination_table_name
          SELECT * FROM source_table_name;
          

          如果您的目标表中已经有以前的数据, 首先你可以使用这个命令

          TRUNCATE TABLE destination_table_name; 
          

          感谢 医学博士马鲁夫侯赛因

          【讨论】:

            【解决方案7】:
            CREATE TABLE table_name
            AS  
            SELECT ...(your select)

            【讨论】:

            • 嗯...这样更好,特别是如果您不知道(或者您不想写)所有列的名称
            【解决方案8】:

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

            CREATE TABLE New_Table_name
            SELECT * FROM Original_Table_name;
            

            【讨论】:

              【解决方案9】:

              mysql 不支持 SELECT ... INTO ... 语法,

              如果是新表,使用 CREATE TABLE ... SELECT ... 语法。

              示例:

              CREATE TABLE artists_and_works
                SELECT artist.name, COUNT(work.artist_id) AS number_of_works
                FROM artist LEFT JOIN work ON artist.id = work.artist_id
                GROUP BY artist.id;
              

              在此处阅读更多信息create-table-select

              【讨论】:

                【解决方案10】:

                如果您想创建一个新表作为重复表。

                CREATE TABLE WorkerClone LIKE Worker;   //only structure will show no data
                CREATE TABLE WorkerClone Select * from  Worker; //DUPLICATE table created with all details.
                

                【讨论】:

                  【解决方案11】:

                  没有CREATE TABLE + INSERT INTO + DROP TABLE 也可以这样操作:

                  SELECT @newsletter_to_send := id_subscriber
                  FROM subscribers WHERE your_condition = your_value;
                  

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2019-12-04
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多