繁体   English   中英

mysql创建一个临时表不起作用...未声明的变量错误...我的代码有什么问题?

[英]mysql Creating a temporary table not working…undeclared variable error…whats wrong with my code?

当我在phpmyadmin中运行以下代码时,出现错误“未定义的变量tmpportfolio”

问题是什么?

SQL:

CREATE TEMPORARY TABLE tmpportfolio (p_name VARCHAR(255),portfolio_id INT UNSIGNED NOT NULL);

SELECT p_name, portfolio_id INTO tmpportfolio
    FROM portfolio
    WHERE parent_portfolio_id IS NULL
    AND portfolio_id NOT IN
        (
           SELECT x.parent_portfolio_id
           FROM portfolio x
           WHERE x.parent_portfolio_id IS NOT NULL
        )
    AND account_id = 1

SELECT * FROM tmpportfolio;

SELECT field INTO variableSELECT field INTO variable的值加载到变量中。 这就是为什么它抱怨未定义变量。

您需要做的是改为使用INSERT INTO table (colummn) SELECT field语句。 例如:

INSERT INTO tmpportfolio (p_name, portfolio_id) 
SELECT p_name, portfolio_id 
FROM portfolio
WHERE parent_portfolio_id IS NULL
AND portfolio_id NOT IN
    (
       SELECT x.parent_portfolio_id
       FROM portfolio x
       WHERE x.parent_portfolio_id IS NOT NULL
    )
AND account_id = 1

您不能使用INTO将记录插入到MySql中的表中(在SQL Server中,您确实使用INTO )。 在MySql中, INTO用于将值放入变量。

通过执行SELECT fields INTO tmpportfolio语句,MySql认为tmpportfolio现在是一个变量,并且无法在SELECT * ..找到该变量。 解决方法是将insert-records sql更改为以下内容:

INSERT INTO tmpportfolio(p_name,portfolio_id) SELECT ....;

只需在一个CREATE TABLE ... SELECT语句中加入前两个SQL语句:

CREATE TABLE tmpportfolio SELECT p_name, portfolio_id FROM portfolio
    WHERE parent_portfolio_id IS NULL
    AND portfolio_id NOT IN
        (
           SELECT x.parent_portfolio_id
           FROM portfolio x
           WHERE x.parent_portfolio_id IS NOT NULL
        )
    AND account_id = 1

SELECT * FROM tmpportfolio;

我无法单独代表mysql,但是通常在创建表后将其插入表中就不会使用selct来创建表(并且因为表已经存在,所以不能使用selct)。

W3Schools在解释如何执行“选择到表中”而未提及特定于某些(非Mysql)实现时似乎产生了困惑。 在dev.mysql的页面上 ,通过说:

MySQL服务器不支持SELECT ... INTO TABLE Sybase SQL扩展。 相反,MySQL Server支持INSERT INTO ... SELECT标准SQL语法,这基本上是相同的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM