Jak mogę wstawić wartości do tabeli, używając podzapytania z więcej niż jednym wynikiem?

102

Byłbym wdzięczny za twoją pomoc.

Zapewne to dość prosty problem do rozwiązania - ale ja nie jestem jedyny .. ;-)

Mam dwie tabele w SQL Server:

  1. artykuł
  2. ceny

Teraz chcę wybrać określony zestaw identyfikatorów i wstawić niektóre wpisy do tabeli cen z tymi identyfikatorami.

np. (błędny i niedziałający SQL)

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

Błąd SQL -> podzapytanie ma więcej niż 1 wartość

dzięki za pomoc

Futuretec
źródło
5
Łał! Tak wiele poprawnych odpowiedzi w dniu 13 marca '12 o 21:18 (wskazówka: możesz najechać kursorem na znacznik czasu, aby uzyskać sekundy)
Rohmer

Odpowiedzi:

154

Chcesz:

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

gdzie po prostu zakodujesz stałe pola.

Mike Ryan
źródło
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 ()) wybierz max (Cse_M_ID) jako identyfikator z iden_course Jak dodać w tym zapytaniu
Sandeep
24

Spróbuj tego:

INSERT INTO prices (
    group, 
    id,
    price
) 
SELECT
    7,
    articleId,
    1.50
FROM
    article 
WHERE 
    name LIKE 'ABC%';
Stefan H.
źródło
12
INSERT INTO prices (group, id, price)
  SELECT 7, articleId, 1.50 FROM article WHERE name LIKE 'ABC%'
Terkel
źródło
12

Jeśli wstawiasz jeden rekord do swojej tabeli, możesz to zrobić

INSERT INTO yourTable 
VALUES(value1, value2)

Ale ponieważ chcesz wstawić więcej niż jeden rekord, możesz użyć SELECT FROMw instrukcji SQL.

więc będziesz chciał to zrobić:

INSERT INTO prices (group, id, price) 
SELECT 7, articleId, 1.50
from article 
WHERE name LIKE 'ABC%'
Taryn
źródło
3

wygląda zapytanie podrzędne

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

Mam nadzieję, że to pomoże

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