Kombinieren Sie zwei Abfragen, um nach Duplikaten in MySQL zu suchen?

8

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:

%Vor%

Gibt es eine Möglichkeit, die beiden Aussagen zu kombinieren?

    
Xaisoft 08.05.2013, 20:13
quelle

5 Antworten

9

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:

%Vor%

Wenn Sie aber nur UNIQUE und keinen Primärschlüssel möchten,

%Vor%

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.

    
John Woo 12.05.2013, 16:28
quelle
1
%Vor%

Ich habe seit einiger Zeit nicht mehr mit SQL gearbeitet, daher kann das falsch sein;)

Bearbeiten:

%Vor%     
Kobus Post 08.05.2013 20:15
quelle
1

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:

%Vor%

HINWEIS : Wenn Robert in der Tabelle vorhanden ist, fügt die obige Abfrage Robert1 ein. Wenn Robert1 existiert, wird Robert2 usw. eingefügt.

    
ahoo 08.05.2013 21:12
quelle
1

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.

    
user2015144 17.05.2013 16:08
quelle
0
%Vor%     
hai 18.05.2013 20:42
quelle

Tags und Links