2012-03-12 13 views
6

Tengo un MySQL insertar consulta que tiene que tirar de un campo de datos de otra tabla y me preguntaba si esto se puede hacer con una selección de la subconsultaMySQL INSERT con selección de la subconsulta para un valor

INSERT INTO resources 
(
    client_account_id, 
    date_time, 
    resource_name, 
    resource_description_id, 
) 
VALUES 
(
     {0}, 
     '{1}', 
     '{2}', 
     {3}, 
) 

y necesito una consulta de selección para obtener el resource_description_id de otra tabla

SELECT resource_description_id 
FROM resource_descriptions 
WHERE resource_description = '{0}' 

he visto ejemplos para duplicar tablas enteras, pero no estoy seguro de cómo esto se puede hacer cuando se necesita sólo un campo de otra tabla y los otros campos venir de una forma.

Gracias!

Respuesta

8

Su subconsulta solo puede seleccionar los valores que necesita. Algo así como:

INSERT INTO resources 
(
    client_account_id, 
    date_time, 
    resource_name, 
    resource_description_id, 
) 
SELECT {0}, '{1}','{2}', resource_description_id 
FROM resource_descriptions 
WHERE resource_description = '{3}' 
+0

El problema con esta respuesta es si resource_description no coincide, entonces no obtienes nada. ¿Has intentado ejecutar tu respuesta? – kasavbere

+0

Bueno, tengo un formulario que un usuario envía nombre de recurso, descripción y palabras clave, antes de insertar en la tabla de recursos que inserto en la tabla de descripción de recursos, por lo que la descripción siempre coincidirá. Pero eso me hace pensar que existe la posibilidad de descripciones de recursos duplicadas. ¿Hay alguna forma de extraer la última fila insertada de una tabla? – mike

1
INSERT INTO resources 
(
    resource_description_id 
) 
(
SELECT resource_description_id 
FROM resource_descriptions 
WHERE resource_description = '{0}' 
) 
0

Usted puede hacer una inserción utilizando los resultados de una consulta de selección

INSERT INTO resources 
(
client_account_id, 
date_time, 
resource_name, 
resource_description_id 
) 
SELECT 
    '{0}', 
    '{1}', 
    '{2}', 
    resource_description_id 
FROM resource_descriptions 
WHERE resource_description = '{0}' 
2
INSERT INTO resources 
(
client_account_id, 
date_time, 
resource_name, 
resource_description_id, 
) 
VALUES 
(
    {0}, 
    '{1}', 
    '{2}', 
    SELECT resource_description_id 
FROM resource_descriptions 
WHERE resource_description = '{0}' 
) 
0

MySQL no como la mayoría de estas consultas a menos que añadió paréntesis alrededor de la subconsulta. Esto es lo que utilicé.

INSERT INTO resources 
(
client_account_id, 
date_time, 
resource_name, 
resource_description_id, 
) 
VALUES 
(
    '{0}', 
    '{1}', 
    '{2}', 
    (SELECT resource_description_id 
    FROM resource_descriptions 
    WHERE resource_description = '{0}') 
) 
Cuestiones relacionadas