Kategorie
MySQL

MySQL INSERT i UPDATE na postawie SELECT

W MySQL można w prosty sposób dodać nowe wiersze do jednej tabeli na podstawie danych wybranych z innej tabeli. Poniżej przykład zapytania, które wstawia do tabela1 w pola pole1_t1, pole2_t1, … wybrane wartości z tabela2 uwzględniając zadany warunek:

INSERT INTO `tabela1` (`pole1_t1`,`pole2_t1`,`pole3_t1`,`pole4_t1`,`pole5_t1`) SELECT `pole1_t2`,`pole2_t2`,`pole3_t2`,`pole4_t2`,'dowolna_wartosc' FROM `tabela2` WHERE `pole1_t2`= '2' LIMIT 2;

Nie we wszystkie pola trzeba wstawiać wartości wybrane z innej tabeli. Jak widać w powyższym przykładzie można również zamiast ‚dowolna_wartość’ wpisać własny ciąg znaków.

Oczywiście w zapytaniu możemy wybierać dane z tej samej tabeli, do której wstawiamy nowe rekordy.

Na podobnej zasadzie możemy również aktualizować rekordy:

UPDATE tabela1 t1, (SELECT * FROM tabela2 WHERE id='x') t2 SET t1.pole1 = t2.pole1 where t1.id=t2.id;
UPDATE tabela1 AS t1 INNER JOIN tabela2 AS t2 ON t1.pole1 = t2.pole2 
SET t1.pole3 = t2.pole4 WHERE t2.pole5 = 'x';

Ciekawym rozwiązaniem może być aktualizacja pola wraz ze zwiększeniem jego wartości zależnym od parametrów pobranych na podstawie SELECT’a:

SET @a =0;
UPDATE tb1 SET pole1 = pole1 + ( @a := @a +1 ) WHERE pole2 = 1 AND pole1 > 2 ORDER BY pole1 ASC;

Powyżej wartość pole1 następujących po sobie rekordów według sortowania jest zwiększana o kolejne liczby całkowite.