INSERT INTO con SELECT

Forums: 

Hola amigos:

Necesito insertar los datos de una tabla dentro de una temporal pero no consigo hacerlo. He revisado la documentación de MySQL sobre el tema, lastimosamente no encuentro nada relevante.

Este es el script que lo debo correr con PHP. Aquí lo lo envío en SQL. Serviría para presentar un "árbol de datos" con PHP.

Aquí creo la tabla temporal:

CREATE TEMPORARY TABLE temp_arbol (
id_node INT(11) NOT NULL AUTO_INCREMENT,
direcion_nodo VARCHAR(254) NOT NULL DEFAULT '',
profundidad_nodo INT(11) NOT NULL DEFAULT '0',
orden_nodo INT(11) NOT NULL DEFAULT '0',
titulo_nodo VARCHAR(254) NOT NULL DEFAULT '',
nodo_con_hijas TINYINT(4) NOT NULL DEFAULT '0',
PRIMARY KEY (id_node),
KEY id_node (id_node),
KEY direcion_node (direcion_node),
KEY profundidad_nodo (profundidad_nodo),
KEY orden_nodo (orden_nodo),
KEY titulo_nodo (titulo_nodo),
KEY nodo_con_hijas (nodo_con_hijas)
) TYPE=MyISAM;

luego necesito pasar datos desde otra tabla y aquí es donde tengo el problema. La sentencia SELECT sola, funciona perfectamente


SELECT 1,
concat("X.", rtrim(cuenta_acumulacion)),
cast(nivel as integer),
1,
concat(cuenta, " --> ", nombre),
if(nivel = '4','y'=1,'y'=0)
FROM plan order by cuenta

pero no en combinación con INSERT


INSERT INTO temp_arbol (
direcion_nodo,
profundidad_nodo,
orden_nodo,
titulo_nodo,
nodo_con_hijas)
VALUES (SELECT
concat("X.", rtrim(cuenta_acumulacion)),
cast(nivel as integer),
1,
concat(cuenta, " --> ", nombre),
if(nivel = '4','y'=1,'y'=0)
FROM plan order by cuenta);

Yo se que cuento con ustedes.

Gracias.

Sin VALUES

Imagen de pepo

El INSERT usando como entrada un SELECT se hace sin usar VALUES ;)


drop table borrar1;
create table borrar1 (
codigo char(10),
nombre char(10)
);
--
drop table borrar2;
create table borrar2 (
codigo char(10),
nombre char(10),
edad number(10)
);
--
insert into borrar2 values ('1','pepo',28);
insert into borrar2 values ('2','paul',28);
insert into borrar2 values ('3','maga',25);
--
insert into borrar1 (codigo, nombre)
select codigo, nombre from borrar2;

Debe funcionar con MySQL, pero lo acabo de hacer en mi trabajo (Oracle10g)

------------------------------------------------
Linux User Registered #232544
Jabber : pepo@jabberes.org
Ekiga : pepo@ekiga.net
ICQ : 337889406
GnuPG-key : www.keyserver.net

------------------------------------------------
Linux User Registered #232544
Jabber : pepo@jabberes.org
Ekiga : pepo@ekiga.net
GnuPG-key : www.keyserver.net

Insertando en una tabla temporal con SELECT

Imagen de alfamikedelta

Hola!

Como dijo pepo La cosa es que no tenés que utilizar la palabra "VALUES", solo el "SELECT", tu sentencia SQL quedaría así:


INSERT INTO temp_arbol (
direcion_nodo,
profundidad_nodo,
orden_nodo,
titulo_nodo,
nodo_con_hijas)
SELECT
concat("X.", rtrim(cuenta_acumulacion)),
cast(nivel as integer),
1,
concat(cuenta, " --> ", nombre),
if(nivel = '4','y'=1,'y'=0)
FROM plan order by cuenta;

Saludos!