wiele updateów w jednym zapytaniu

Odpowiedz Nowy wątek
2011-08-16 14:59
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

edytowany 1x, ostatnio: chypno, 2011-08-16 15:04

Pozostało 580 znaków

2011-08-16 15:17
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 ...

Pozostało 580 znaków

2011-08-16 15:37
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
UPDATE wymaga podania nazwy kolumny więc tego nie obejdziesz. - MiL 2011-08-16 15:42

Pozostało 580 znaków

2011-08-22 21:02
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.


Tomasz Andrzejewski
Delphi (XE3-XE7) framework engineer @ InterLan
MCP: Microsoft SQL Server 2008, Implementation and Maintenance

Pozostało 580 znaków

2011-08-23 10:08
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

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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