¿Cómo puedo insertar valores en una tabla, usando una subconsulta con más de un resultado?

96

Realmente agradecería su ayuda.

Probablemente sea un problema bastante simple de resolver, pero no soy yo ... ;-)

Tengo dos tablas en SQL Server:

  1. artículo
  2. precios

Ahora quiero seleccionar un cierto conjunto de identificadores e insertar algunas entradas en la tabla de precios con esos identificadores.

por ejemplo (SQL incorrecto y no funciona)

INSERT INTO prices (group, id, price) 
VALUES (7, (select articleId from article WHERE name LIKE 'ABC%'), 1.50);

Error de SQL -> la subconsulta tiene más de 1 valor

gracias por la ayuda

Futuretec
fuente
5
¡Guauu! Tantas respuestas correctas, todas el 13 de marzo de 2012 a las 21:18 (pista: puede pasar el cursor sobre la marca de tiempo para obtener los segundos)
Rohmer

Respuestas:

148

Usted quiere:

insert into prices (group, id, price)
select 
    7, articleId, 1.50
from article where name like 'ABC%';

donde simplemente codifica los campos constantes.

Mike Ryan
fuente
INSERT INTO iden_course(Cse_M_ID, Cse_M_Name, Cse_M_ShName, Cse_M_TotSem, Cse_M_CreatedDate) VALUES ( 'ID', 'Bjf', 'BJfg', '4', ahora ()) select max (Cse_M_ID) como identificación de iden_course cómo añadir en esta consulta
SANDEEP
23

Prueba esto:

INSERT INTO prices (
    group, 
    id,
    price
) 
SELECT
    7,
    articleId,
    1.50
FROM
    article 
WHERE 
    name LIKE 'ABC%';
Stefan H
fuente
12
INSERT INTO prices (group, id, price)
  SELECT 7, articleId, 1.50 FROM article WHERE name LIKE 'ABC%'
Terkel
fuente
12

Si está insertando un registro en su tabla, puede hacer

INSERT INTO yourTable 
VALUES(value1, value2)

Pero como desea insertar más de un registro, puede usar un SELECT FROMen su declaración SQL.

entonces querrás hacer esto:

INSERT INTO prices (group, id, price) 
SELECT 7, articleId, 1.50
from article 
WHERE name LIKE 'ABC%'
Taryn
fuente
3

la subconsulta parece

 insert into table_name (col1,col2,....) values (select col1,col2,... FROM table_2 ...)

espero que esto ayude

Muhannad A. Alhariri
fuente
1
INSERT INTO prices(group, id, price)
SELECT 7, articleId, 1.50
FROM article where name like 'ABC%';
Teja
fuente