2013-03-20 8 views
36

Czy istnieje sposób wstawienia wstępnie ustawionych wartości i wartości, które otrzymuję z kwerendy wybierającej? Na przykład:MySQL INSERT INTO ... WARTOŚCI i WYBIERZ

INSERT INTO table1 VALUES ("A string", 5, [int]). 

mam wartość "A" i ciąg numer 5, ale mam znaleźć [int] wartość z select tak:

SELECT idTable2 
FROM table2 
WHERE ... 

że daje mi ten identyfikator do umieszczenia w tabeli1.

Jak połączyć to w jedno zdanie?

Odpowiedz

62

Stosuj insert ... select zapytanie, i umieścić znane wartości w select:

insert into table1 
select 'A string', 5, idTable2 
from table2 
where ... 
+1

Problem mam z tym podejściem stwierdzone jest, że jeśli 'SELECT' zwraca zero rekordy następnie oświadczenie powiedzie się, ale nie dane jest' INSERT'. –

+2

@ NeilC.Obremski: Tak, ale to tylko problem, jeśli oczekujesz, że wynik będzie inny. Jeśli chcesz w tym przypadku wystąpić błąd, możesz zamiast tego użyć podkwerendy. – Guffa

+0

Bardzo dziękuję, przeglądałem internet pod tym numerem – ComradeJoecool

1

spróbuj wykonać następujące czynności:

INSERT INTO table1 
SELECT 'A string', 5, idTable2 idTable2 FROM table2 WHERE ... 
46

wystarczy użyć podzapytania tam jak:

INSERT INTO table1 VALUES ("A string", 5, (SELECT ...)). 
+2

+1, aby podać przykład tego, jak to zrobić, nadal używając składni "VALUES". – EleventyOne

+1

ta metoda może powodować błąd, taki jak "więcej niż jeden wiersz" –

+5

Powinien to być "WSTAW DO WARTOŚCI 1 WARTOŚCI (" Ciąg ", 5, (WYBIERZ ... LIMIT 1))." – Rahnzo

0

Spróbuj tego:

INSERT INTO table1 SELECT "A string", 5, idTable2 FROM table2 WHERE ... 
1
INSERT INTO table1 (col1, col2) 
SELECT "a string", 5, TheNameOfTheFieldInTable2 
FROM table2 where ... 
8

spróbować to

INSERT INTO TABLE1 (COL1 , COL2,COL3) values 
('A STRING' , 5 , (select idTable2 from Table2)) 
where ... 
+4

Co z wieloma kolumnami z tabeli "WYBIERZ"? Jeśli spróbuję pobrać więcej niż jedną kolumnę, otrzymam 'Operand powinien zawierać 1 kolumnę (y)'. –

5

Wszystkie inne odpowiedzi rozwiązuje problem i moja odpowiedź działa w ten sam sposób, jak innych, ale tylko na bardziej dydaktycznie sposób (działa na MySQL ... nie znasz innych serwerów SQL):

INSERT INTO table1 SET 
    stringColumn = 'A String', 
    numericColumn = 5, 
    selectColumn = (SELECT idTable2 FROM table2 WHERE ...); 

Można odwołać się do dokumentacji MySQL: INSERT Syntax

10
 
INSERT INTO table_name1 
      (id, 
      name, 
      address, 
      contact_number) 
SELECT id, name, address, contact_number FROM table_name2;