2009-05-13 17 views
18

¿Cómo escribo la instrucción INSERT si obtengo los valores de colA de TableX, colB de TableY y colC de TableZ?SQL: INSERTAR EN ... VALORES..SELECCIONAR

por ejemplo: insertar en la Tabla A (COLA, colB, ColC) VALORES

Cualquier idea si es posible (?,?,?)?

+0

es este Java? parece ser un problema simple de SQL, o me perdí algo? –

+0

La etiqueta de Java parece haberse agregado por accidente, veré si puedo eliminarla – Andomar

+0

¿Qué pasó con el póster original? Sin pts. ¿Alguna posibilidad de que un administrador pueda seleccionar una respuesta aquí? –

Respuesta

33
INSERT INTO TableA(colA, colB, colC) 
    SELECT TableX.valA, TableY.valB, TableZ.valC 
    FROM TableX 
    INNER JOIN TableY ON :...... 
    INNER JOIN TableZ ON ........ 

Por supuesto, TABLEX, Tabley y TAbleZ también podrían estar relacionados de alguna otra manera (no unión interna).

Si no puede encontrar ninguna relación entre las tablas en absoluto, también se puede hacer de tres separada

SELECT @value1 = valA FROM TableX WHERE ...... 
SELECT @value2 = valB FROM TableY WHERE ...... 
SELECT @value3 = valC FROM TableZ WHERE ...... 

y luego una inserción como esta:

INSERT INTO TableA(colA, colB, colC) 
      VALUES(@value1, @value2, @value3) 

Eso es lo último último recurso, no puede expresar todo en una sola declaración SELECT.

Marc

+0

la valA, valB, valC es de diferentes tablas ... –

4
Insert into TableA (ColA, ColB, ColC) . . . 

Deben ser los nombres de columna como se encuentran en la Tabla A. No hay nada malo con

Insert into TableA (ColA, ColB, ColC) . . . 
Select TableX.Col1, TableY.Col1, TableZ.Col5 
From TableX, TableY, TableZ 
Where . . . 
+0

ok ... genial ... estoy usando esto en Java, entonces si colC está obteniendo los valores de un método (p. Ej .: método())? –

+0

Lo siento, no hago Java –

22

En respuesta a la respuesta de marc_s, puede realizar consultas desde tablas no relacionadas en a desde seleccionar como:

INSERT INTO TableA 
    (colA, colB, colC) 
SELECT 
    (SELECT valA FROM TableX WHERE ...), 
    (SELECT valB FROM TableY WHERE ...), 
    (SELECT valC FROM TableZ WHERE ...) 
+4

+1 - excelente respuesta - gracias! Tu aprendes algo nuevo cada dia.... –