2016-12-02 6 views
-1
IF NOT EXISTS (SELECT 1 FROM Products WHERE name='Iphone1' AND manufacturer='appl') THEN 
     INSERT INTO Products(product_id, name, category, manufacturer) 
     VALUES (10000, 'IphoneZ', null, 'appl'); 

ERROR: syntax error at or near "IF" LINE 1: IF NOT EXISTS (SELECT 1 FROM Products WHERE name='Iphone1' A...Fehler mit IF EXISTS()

Kann mir jemand helfen zu verstehen, was ich falsch mache?

+1

Doppelte Anführungszeichen anstatt einzelner? – jarlh

+1

lesen Sie das Handbuch http://dev.mysql.com/doc/refman/5.7/en/exists-and-not-exists-subqueries.html – 2oppin

+1

Googeln Sie Ihren Titel und 'mysql': http://stackoverflow.com/questions/5528854/using-of-mysqls-wenn-existiert. Bitte lesen [fragen]. – philipxy

Antwort

0

MySQL unterstützt nur die IFAnweisung in Programmierblöcken - gespeicherte Prozeduren, Funktionen und Trigger. Daher können Sie nicht so tun, was Sie wollen.

Stattdessen können Sie nur eine einzelne Abfrage schreiben:

INSERT INTO Products (product_id, name, category, manufacturer) 
    SELECT product_id, name, category, manufacturer 
    FROM (SELECT 10000 as product_id, 'IphoneZ' as name, null as category, 'appl' as manufacturer) t 
    WHERE NOT EXISTS (SELECT 1 FROM Products p WHERE p.name = t.name and p.manufacturer = t.manufacturer); 

Eigentlich aber ist es am besten direkt auf die Datenbank, diese Art von Eindeutigkeit erzwingen zu haben. Sie können dies mit einem eindeutigen Constraint/index:

CREATE UNIQUE INDEX unq_product_manufacturer_name ON product(manufacturer, name); 

Dann können Sie eine Abfrage schreiben, um Fehler zu ignorieren, indem Sie:

INSERT INTO Products (product_id, name, category, manufacturer) 
    VALUES (10000, 'IphoneZ', null, 'appl') 
    ON DUPLICATE KEY UPDATE category = VALUES(category); 

Die ON DUPLICATE KEY nichts tun - es dient nur zu Vermeiden Sie die Rückgabe eines Fehlers, wenn ein doppelter Wert eingefügt wird.

0

Sie fehlen END IF Schlüsselwort am Ende der IF-Anweisung. Außerdem kann diese SQL-Anweisung nur in einem Routinenblock wie Stored Procedure oder Stored Function verwendet werden.

Ihre SQL sollte wie folgt sein:

IF NOT EXISTS (SELECT 1 FROM Products WHERE name='Iphone1' AND manufacturer = 'appl') THEN 
    INSERT INTO Products(product_id, name, category, manufacturer) 
    VALUES (10000, 'IphoneZ', null, 'appl'); 
END IF; 
0
  1. Ist es MySQL oder SQL Server?
  2. Ich glaube, Sie tippen falsch: name = 'Iphone1'. Es sollte "IphoneZ" sein.
  3. An einigen Stellen wurden einfache Anführungszeichen und an einigen Stellen doppelte Anführungszeichen verwendet.

Wenn es mysql dann unter Abfrage versuchen INSERT INTO Produkte (product_id, Name, Kategorie, Hersteller) SELECT * FROM (10000 wählen, 'IphoneZ', null, 'Appl') AS tmp_table WHERE NOT EXISTS (SELECT 1 VON Products_arun WHERE Name = 'IphoneZ' AND Hersteller = 'Appl') LIMIT 1;

Wenn SQL Server dann unter Abfrage versuchen IF NOT EXISTS (1 FROM Produkt SELECT WHERE name = 'IphoneZ' und Hersteller = 'Appl') INSERT INTO Produkt (product_id, Name, Kategorie, Hersteller) VALUES (10000, 'IphoneZ', Null, 'Appl');