Okazuje się, że błąd w systemie nieprawidłowo nazwał mężczyzn (M) kobietami (W) i odwrotnie w bazie danych. Kolumny dopuszczają tylko jeden znak. Bez użycia tabel tymczasowych napisz jedno zapytanie o aktualizację, aby rozwiązać ten problem.
To pytanie zostało zadane podczas ostatniego wywiadu, który przeprowadziłem, i przechodzę do kolejnych wywiadów, które mogą mieć podobne pytania, więc chciałem dowiedzieć się, jak sobie z tym poradzić.
Odpowiedzi:
Chcesz użyć
CASE
wyrażenia pewnego typu.W SQL Server kod wygląda następująco:
Edycja: Jak stwierdzono w komentarzach (i niektórych innych odpowiedziach), ELSE nie jest konieczne, jeśli umieścisz w instrukcji klauzulę WHERE.
Pozwala to uniknąć niepotrzebnych aktualizacji. W obu przypadkach ważne jest, aby pamiętać, że istnieją opcje inne niż M & W (na przykład NULL) i nie chcesz wprowadzać błędnych informacji. Na przykład:
Zastąpiłoby to wszystkie wartości NULL (lub inne możliwe płcie) jako „M”, co byłoby niepoprawne.
Byłoby kilka innych opcji
I bardziej zwięzłe
źródło
IIF()
zeIF()
i to działa w MySQL;)W Oracle możesz użyć CASE, ponieważ inne odpowiedzi mają:
Możesz także użyć DECODE:
źródło
Aby przełączać się między dwiema wartościami, możesz także wypróbować tę sztuczkę, która nie używa
CASE
wyrażenia (zakładając tutaj Transact-SQL):W zależności od bieżącej wartości
Gender
,ASCII(Gender)
anuluje albo,ASCII('M')
alboASCII('W')
pozostawiając drugi kod do przekształcenia przezCHAR()
funkcję z powrotem na odpowiedni znak.Ale pozostawiam to tylko dla porównania. Chociaż ta opcja może mieć pozory elegancji, rozwiązanie wykorzystujące
CASE
wyrażenie byłoby prawdopodobnie bardziej czytelne, a zatem łatwiejsze w utrzymaniu, i zdecydowanie łatwiej byłoby rozszerzyć je na więcej niż dwie wartości.źródło
M
iW
zostały wprowadzone dużymi literami, aby uniknąć nieoczekiwanego7
lub pojawienia się `-` w wynikach.ASCII(Gender)
jeASCII(UPPER(Gender))
, co jest mniej eleganckie, choć niewiele.WHERE
klauzulę?Możesz to zrobić za pomocą
case ... when
wyrażenia:źródło
Użyłbym aktualizacji z
case
wyrażeniem.źródło
Możesz wykonać tę aktualizację za pomocą
case
wyrażenia.Sugeruję uruchomienie instrukcji aktualizacji w ramach transakcji i dodanie prostego zapytania, takiego jak:
w celu sprawdzenia wyników, które otrzymasz. Przeprowadzanie transakcji z wycofaniem i przełączanie jej na zatwierdzenie, gdy wyniki są zgodne z oczekiwaniami.
źródło