Ich habe eine Tabelle, die so aussieht:
%Vor%Das möchte ich tun:
Wenn die Nummer bereits in der Datenbank vorhanden ist, fügen Sie keinen neuen Datensatz ein.
Wenn die Nummer nicht in der Datenbank ist, aber der Name ist, erstellen Sie einen neuen Namen und fügen Sie ihn ein. Wenn ich zum Beispiel einen Datensatz habe, der 123
für Number
und Bob
für Name
enthält, möchte ich ihn nicht einfügen, aber wenn ich einen Datensatz erhalte, der 456
für% co_de enthält % und Number
für Robert
, ich würde name
und 456
einfügen. Ich wollte nach Dubletten suchen wie:
Gibt es eine Möglichkeit, die beiden Aussagen zu kombinieren?
Es gibt tatsächlich zwei Probleme in Ihrer Frage. Das erste Problem besteht darin, die Spalte Number
eindeutig zu machen, und die zweite besteht darin, die Spalte Name
zu erhöhen, indem eine Zahl angehängt wird, falls sie bereits existiert.
ERSTER TEIL
Da die Zahl UNIQUE
ist, erzwingen Sie eine Einschränkung UNIQUE
für die Spalte. Es könnte ein PRIMARY KEY
oder ein UNIQUE KEY
sein.
Wenn die Spalte kein KEY
hat und Sie PRIMARY
machen wollen, ist hier die ALTER
Anweisung:
Wenn Sie aber nur UNIQUE
und keinen Primärschlüssel möchten,
ZWEITER TEIL
Sie können es tatsächlich tun, ohne Join zu verwenden.
%Vor%Einige Details:
Wenn der in der Spalte Number
angegebene Wert bereits vorhanden ist, wird ein Fehler ausgegeben, da die Spalte eindeutig ist. Ich habe einen Kommentar von einem gelöschten Post gelesen, der sagt: ".. Number ist nicht eindeutig, aber wenn es existiert, möchte ich keinen Datensatz eingeben." - es macht keine Sinn, wenn Sie Eindeutigkeit in der Spalte nicht hinzufügen möchten. Woher weißt du, ob die Nummer bereits existiert oder nicht? Ein bisschen nach der Existenz von Number
zu suchen fühlt sich für mich wie ein kleiner Overhead an. Meine beste Empfehlung ist also, die Einzigartigkeit durchzusetzen.
Ich habe seit einiger Zeit nicht mehr mit SQL gearbeitet, daher kann das falsch sein;)
Bearbeiten:
%Vor% Verwenden Sie diese Abfrage, um die Zeile [123, 'Robert']
einzufügen. Wenn Sie andere Werte einfügen möchten, ändern Sie 123
& amp; Robert
-Werte in der unteren Abfrage:
HINWEIS : Wenn Robert
in der Tabelle vorhanden ist, fügt die obige Abfrage Robert1
ein. Wenn Robert1
existiert, wird Robert2
usw. eingefügt.
macht sowohl die Nummer als auch den Namen eindeutig.
%Vor%Sie können jetzt eine Einfügung mit ON DUPLICATE
durchführen %Vor%Zum Anhängen einer Zahl nach dem Namen würde ich stattdessen die Autoincrement-Spalte vorschlagen.