Mogę użyć, CASE
aby wybrać kolumny do wyświetlenia w SELECT
zapytaniu (Postgres), na przykład:
SELECT CASE WHEN val = 0 THEN column_x
WHEN val = 1 THEN column_y
ELSE 0
END AS update, ...
Czy w ogóle jest możliwe coś podobnego podczas wykonywania UPDATE
zapytania w Postgres (tj. Wybierz kolumny, które chcesz zaktualizować)? Zakładam, że nie, ponieważ nie mogłem nic na ten temat znaleźć, ale może ktoś ma sprytną alternatywę (oprócz zastosowania procedury lub aktualizacji każdej kolumny za pomocą a, CASE
aby ustalić, czy wartość kolumny należy przypisać nową wartość, czy po prostu przypisać istniejącą wartość). Jeśli nie ma łatwej alternatywy, oczywiście zaakceptuję to również jako odpowiedź.
Dodatkowe informacje : w moim przypadku mam 14 potencjalnych kolumn, które można zaktualizować, przy czym tylko jedna jest aktualizowana na pasujący wiersz (tabela do aktualizacji jest połączona z inną w zapytaniu). Liczba wierszy do aktualizacji najprawdopodobniej będzie się różnić, może wynosić dziesiątki lub setki. Uważam, że istnieją indeksy warunków przyłączenia.
źródło
Ile masz różnych kombinacji kolumn do zaktualizowania? Ile wierszy całej tabeli zostanie zaktualizowanych? Czy istnieją indeksy umożliwiające szybki dostęp do aktualizowanych wierszy?
W zależności od odpowiedzi na te pytania możesz być w stanie wykonać wiele instrukcji aktualizacji, po jednej dla każdej kolumny, którą chcesz zaktualizować, i umieść warunek na wartości tej kolumny w klauzuli where aktualizacji, aby zero wierszy było aktualizowanych, jeśli ta kolumna jest aktualizowana ma złą wartość.
Spróbuj pomyśleć na podstawie zestawu, nie zakładaj, że aktualizacja musi zaktualizować pojedynczy wiersz znaleziony przez klucz podstawowy.
źródło
źródło