wiele updateów w jednym zapytaniu

0

Witam
Baza - mysql.
Nie wiem jak w jednym zapytaniu wykonać wiele updateów dla kilku kolumn. Update w jednym zapytaniu dla jednej kolumny robi się tak:

UPDATE table
SET value_code = CASE WHEN value_type = 'value1' THEN 1
WHEN value_type = 'value2' THEN 2
WHEN value_type = 'value3' THEN 3
WHEN value_type = 'value4' THEN 4
END

Jednak mi potrzebny jest taki, który będzie aktualizował wiele kolumn. Próbowałem z wyrażeniem IN, ale chyba nie może występować po SET.
Teoretyczny model wygląda tak:

UPDATE table SET (col1,col2,...) IN CASE WHEN id = x THEN (SELECT value1,value2) ... END

0

ogólna zasada:

update <nazwa_tabeli>
set <nazwa_kolumny> = <wartość>, <nazwa_kolumny> = <wartość>, ...
when <warunki>

Nie napisałeś jaki SZBD, a to może być pomocne.

update tabela1
set col1 = case ... end,
     col2 = case ... end,
     ...
when ...
0

Baza Mysql.

Dzięki za odpowiedź. Myślałem nad takim rozwiązaniem, ale tworzy się tu dużo powtarzalnego kodu. Jak nie będzie innego rozwiązania to tak pewnie będę musiał tak zrobić. W tabeli mam około 20 kolumn i czytelniej by to wyglądało gdybym od razu aktualizował jeden wiersz, ale jak to zrobić ? Poza tym nie wiem jakby wyglądała wydajność takiego update. Tak jak sugerujesz to by wyglądało w ten sposób:

UPDATE table1
SET col1 = CASE WHEN id = 1 THEN x
WHEN id = 2 THEN a
WHEN id = 3 THEN b
else col1 END,

 col2 = CASE WHEN id = 1 THEN g
   WHEN id = 2 THEN y
   WHEN id = 3 THEN j
	else col2 END
0

a moze tak?

UPDATE table
SET value_code = X.value
FROM
  (SELECT 1 [value_type], 1 [Value]
   UNION ALL
   SELECT 2 [value_type], 2 [Value]
   UNION ALL
   SELECT 3 [Value_type], 3 [Value]
   UNION ALL
   SELECT 4 [Value_type], 4 [Value]
 ) X
WHERE table.value_type = X.value_type

Jesli to co napisalem za pomoca UNION da sie zamienic na np SELECT z innej tabeli (nie znam logiki Twoich tabel) to zamien.

0

Nie wszystie SZBD dopuszczają taką konstrukcję, chypno używa mysql, który nie ma takie konstrukcji http://dev.mysql.com/doc/refman/5.6/en/update.html

1 użytkowników online, w tym zalogowanych: 0, gości: 1