Sie stellen fest, dass ein Fehler in einem System dazu geführt hat, dass Männer (M) fälschlicherweise als Frauen (W) benannt wurden und umgekehrt in der Datenbank. Die Spalten erlauben nur ein Zeichen. Schreiben Sie ohne Verwendung von temporären Tabellen eine Aktualisierungsabfrage, um dies zu beheben.
Diese Frage wurde kürzlich bei einem Interview gestellt, das ich hatte, und ich gehe auf weitere Interviews ein, die möglicherweise ähnliche Fragen haben. Daher wollte ich eine Vorstellung davon bekommen, wie ich damit umgehen soll.
Antworten:
Sie möchten einen
CASE
Ausdruck eines Typs verwenden.In SQL Server würde der Code folgendermaßen aussehen:
Bearbeiten: Wie in den Kommentaren (und einigen anderen Antworten) angegeben, ist ELSE nicht erforderlich, wenn Sie eine WHERE-Klausel in die Anweisung einfügen.
Dies vermeidet unnötige Updates. In beiden Fällen ist es wichtig, sich daran zu erinnern, dass es andere Optionen als M & W gibt (z. B. NULL) und Sie keine falschen Informationen eingeben möchten. Beispielsweise:
Dies würde alle NULL-Werte (oder andere mögliche Geschlechter) als 'M' ersetzen, was falsch wäre.
Ein paar andere Optionen wären
Und eine prägnantere
quelle
IIF()
mitIF()
und es würde in MySQL arbeiten;)In Oracle können Sie einen CASE verwenden, wie die anderen Antworten lauten:
Sie können auch einen DECODE verwenden:
quelle
Um zwischen nur zwei Werten zu wechseln, können Sie auch diesen Trick ausprobieren, bei dem kein
CASE
Ausdruck verwendet wird (hier wird Transact-SQL vorausgesetzt):Je nach dem aktuellen Wert
Gender
,ASCII(Gender)
wird zunichte machen entwederASCII('M')
oderASCII('W')
, den anderen Code verlassen durch die zu transformierendenCHAR()
Funktion zurück in den entsprechenden Zeichen.Ich lasse dies jedoch nur zum Vergleich. Während diese Option einen Anspruch auf Eleganz hat, wäre eine Lösung, die einen
CASE
Ausdruck verwendet, wahrscheinlich besser lesbar und daher leichter zu pflegen, und es wäre definitiv einfacher, sie auf mehr als zwei Werte zu erweitern.quelle
M
undW
in Großbuchstaben eingegeben wurden, um zu vermeiden, dass unerwartete7
oder `-` in den Ergebnissen erscheinen.ASCII(Gender)
mitASCII(UPPER(Gender))
, was weniger elegant ist, wenn auch nicht viel.WHERE
Klausel abgelehnt ?Sie können es mit einem
case ... when
Ausdruck tun :quelle
Ich würde ein Update mit einem
case
Ausdruck verwenden.quelle
Sie können dieses Update mit einem
case
Ausdruck durchführen.Ich würde vorschlagen, Ihre Update-Anweisung innerhalb einer Transaktion auszuführen und eine einfache Abfrage hinzuzufügen, z.
um die Ergebnisse zu überprüfen, die Sie erhalten. Durchführen der Transaktion mit einem Rollback und Umschalten auf ein Commit, wenn Ihre Ergebnisse mit den Erwartungen übereinstimmen.
quelle