Próbuję zrozumieć, jak ZAKTUALIZOWAĆ wiele wierszy z różnymi wartościami i po prostu tego nie rozumiem. Rozwiązanie jest wszędzie, ale wydaje mi się trudne do zrozumienia.
Na przykład trzy aktualizacje do 1 zapytania:
UPDATE table_users
SET cod_user = '622057'
, date = '12082014'
WHERE user_rol = 'student'
AND cod_office = '17389551';
UPDATE table_users
SET cod_user = '2913659'
, date = '12082014'
WHERE user_rol = 'assistant'
AND cod_office = '17389551';
UPDATE table_users
SET cod_user = '6160230'
, date = '12082014'
WHERE user_rol = 'admin'
AND cod_office = '17389551';
I czytać przykład, ale ja naprawdę nie rozumiem, jak zrobić kwerendę. to znaczy:
UPDATE table_to_update
SET cod_user= IF(cod_office = '17389551','622057','2913659','6160230')
,date = IF(cod_office = '17389551','12082014')
WHERE ?? IN (??) ;
Nie jestem do końca jasne, jak wykonać zapytanie, jeśli w warunku GDZIE i warunek JEŻELI występuje wiele warunków… wszelkie pomysły?
mysql
sql
sql-update
franvergara66
źródło
źródło
Odpowiedzi:
Możesz to zrobić w ten sposób:
Nie rozumiem twojego formatu daty. Daty powinny być przechowywane w bazie danych przy użyciu natywnych typów daty i czasu.
źródło
update
wpływa tylko na rekordy, które już istnieją.cod_user
jest to klucz podstawowy, a wartości są tasowane, prawdopodobnie najlepszym rozwiązaniem jest wielokrotne aktualizacje.MySQL umożliwia bardziej czytelny sposób łączenia wielu aktualizacji w jedno zapytanie. Wydaje się, że lepiej pasuje do opisywanego przez ciebie scenariusza, jest znacznie łatwiejszy do odczytania i pozwala uniknąć tych trudnych do rozplątania wielu warunków.
Zakłada się, że
user_rol, cod_office
kombinacja jest kluczem podstawowym. Jeśli tylko jedno z nich jest kluczem podstawowym , dodaj drugie pole do listy UPDATE. Jeśli żaden z nich nie jest kluczem podstawowym (co wydaje się mało prawdopodobne), to podejście zawsze tworzy nowe rekordy - prawdopodobnie nie to, co jest pożądane.Jednak takie podejście sprawia, że przygotowane zestawienia są łatwiejsze do zbudowania i bardziej zwięzłe.
źródło
cod_user=VALUES(cod_user), ...
Możesz użyć
CASE
instrukcji do obsługi wielu scenariuszy jeśli / to:źródło
źródło
Aby przedłużyć odpowiedź na @Trevedhek ,
W przypadku, gdy aktualizacja musi być wykonana przy użyciu nieunikalnych kluczy, potrzebne będą 4 zapytania
UWAGA: To nie jest bezpieczne dla transakcji
Można to zrobić za pomocą tabeli tymczasowej.
Krok 1: Utwórz klucze tabeli tymczasowej i kolumny, które chcesz zaktualizować
Krok 2: Wstaw wartości do tabeli tymczasowej
Krok 3: Zaktualizuj oryginalną tabelę
Krok 4: Usuń tabelę tymczasową
źródło
Tutaj col4 i col1 są w Table1. col2 i col3 znajdują się w Table2
Próbuję zaktualizować każdy col1, gdzie col4 = col3 różne wartości dla każdego wiersza
źródło
Zrobiłem to w ten sposób:
gdzie PushSettings jest
to działa dobrze
źródło