Como posso inserir valores em uma tabela, usando uma subconsulta com mais de um resultado?

96

Eu realmente apreciaria sua ajuda.

Provavelmente é um problema bastante simples de resolver - mas não sou eu .. ;-)

Tenho duas tabelas no SQL Server:

  1. artigo
  2. preços

Agora quero selecionar um certo conjunto de ids e inserir algumas entradas na tabela de preços com esses IDs.

por exemplo (SQL errado e não funcionando)

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

Erro SQL -> subconsulta tem mais de 1 valor

obrigado pela ajuda

Futuretec
fonte
5
Uau! Tantas respostas corretas, todas em 13 de março de 12 às 21:18 (dica: você pode passar o mouse sobre o carimbo de data / hora para obter os segundos)
Rohmer

Respostas:

148

Você quer:

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

onde você apenas codifica os campos constantes.

Mike Ryan
fonte
INSERT INTO iden_course(Cse_M_ID, Cse_M_Name, Cse_M_ShName, Cse_M_TotSem, Cse_M_CreatedDate) VALUES ( 'ID', 'BJF', 'BJfg', '4', Now ()) selecione max (Cse_M_ID) como ID de iden_course como adicionar nesta consulta
SANDEEP
23

Experimente isto:

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

Se você estiver inserindo um registro em sua tabela, você pode fazer

INSERT INTO yourTable 
VALUES(value1, value2)

Mas como você deseja inserir mais de um registro, pode usar um SELECT FROMem sua instrução SQL.

então você vai querer fazer isso:

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

a sub-consulta parece

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

espero que esta ajuda

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