2010-10-14 7 views
0

Lorsque je cours le code ci-dessous à l'intérieur de phpmyadmin j'obtiens une erreur "Undefined Variable tmpportfolio"mysql Création d'une table temporaire ne fonctionne pas ... erreur variable non déclarée ... quel est le problème avec mon code?

quel est le problème?

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; 

Répondre

1

Il suffit de se joindre deux premières instruction SQL dans un CREATE TABLE ... SELECT statment:

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; 
+0

merci. cela a fonctionné. – Ronedog

0

Je ne peux pas parler pour MySQL sepcifically mais le plus souvent une fois que vous avez créé une table que vous insérez dans ce qu'il n'utiliser SELCT dans lequel crée la table (et qui ne peut pas depuis le table existe déjà.)

0

vous ne pouvez pas utiliser INTO pour insérer des enregistrements dans une table MySql (dans SQL Server, vous faire usageINTO cette façon). En MySql, INTO est utilisé pour mettre une valeur dans une variable. En faisant l'instruction SELECT fields INTO tmpportfolio, MySql pense que tmpportfolio est maintenant une variable et ne peut pas trouver la variable dans SELECT * ... La solution est de changer l'insertion des documents sql à quelque chose comme:

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

2

SELECT field INTO variable charge la valeur du champ dans une variable. C'est pourquoi il se plaint que la variable ne soit pas définie.

Ce que vous devez faire est d'utiliser une instruction INSERT INTO table (colummn) SELECT field à la place. Par exemple:

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 
+0

grâce, cela fonctionne. – Ronedog

Questions connexes