2016-10-11 6 views
1

ich den folgenden Befehl verwendet, Duplikate in einer Tabelle zu vermeiden:einfügen, wenn nicht scheitern nicht existiert, wenn die Tabelle leer

INSERT INTO mytable (num,name) 
SELECT 2,'example' FROM mytable WHERE NOT EXISTS 
(SELECT * FROM mytable WHERE num=2 AND name='example') LIMIT 1; 

Es funktioniert aber nicht, wenn mytable leer ist.

Meine Tabelle enthält auch eine AUTO_INCREMENT ID.

CREATE TABLE mytable (
id int(11) NOT NULL auto_increment, 
num int(11) NOT NULL, 
name varchar(100) NOT NULL, 
PRIMARY KEY (id) 
); 

Empfiehlt sich eine andere Methode oder ein Workaround?

+1

Sind das ein einmalige, oder hat Ihre Tabelle eine _requirement_, dass die Kombination von 'num, name' immer eindeutig sein? Wenn dies der Fall ist, müssen Sie für dieses Spaltenpaar einen "UNIQUE" -Index erstellen. –

+0

Versuchen Sie 'SELECT 2, 'Beispiel' VON Dual WHERE ...' stattdessen. – JimmyB

+0

was meinst du funktioniert nicht? –

Antwort

-1

Sie können von Tabl etwas wie Select * tun, wo _____ = ______

Dann if-Anweisung hinzufügen, wenn Ergebnisse verfügbar sind dann einfügen oder auf andere Weise verlassen

-1

Warum gehst du nicht einfach INSERT IGNORE verwenden. Warum möchten Sie auch die Daten aus derselben Tabelle kopieren?

0

In meinem Fall ersetzte mytable von DUAL den Trick. (Aber ich habe keine Ahnung, warum)

INSERT INTO mytable (num,name) 
SELECT 2,'example' FROM mytable WHERE NOT EXISTS 
(SELECT * FROM mytable WHERE num=2 AND name='example') LIMIT 1; 

Ersetzt durch:

INSERT INTO mytable (num,name) 
SELECT 2,'example' FROM DUAL WHERE NOT EXISTS 
(SELECT * FROM mytable WHERE num=2 AND name='example') LIMIT 1; 

Danke für die Hilfe.

+0

Grund: 'SELECT FROM meine Tabelle WHERE ' wird * no * Datensätze zurückgeben, wenn 'Mytable' leer ist. Mit 'dual' können Sie auch 'LIMIT 1' weglassen, da 'dual' nur einen Datensatz enthält. – JimmyB

1

Sie können durch den Einsatz von MySQL UNIQUE

einfach aktualisieren Sie Ihre CREATE TABLE Abfrage wie unten

CREATE TABLE mytable (
    id int(11) NOT NULL auto_increment, 
    num int(11) NOT NULL, 
    name varchar(100) NOT NULL, 
    PRIMARY KEY (id), 
    UNIQUE (num) # You can define Unique column like this 
); 

Hinweis Einzigartige Spalte erstellen: dann keine Notwendigkeit, den Sie überprüfen Einzigartige Wert beim Speichern in der Datenbank.

Und versuchen normale SQL-Abfrage zu verwenden, zum Einfügen von Daten

INSERT INTO mytable (num,name) VALUES(2,'example') 
Verwandte Themen