2016-12-02 7 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...エラーが

)(EXISTS誰も私が私が間違っているのか理解に役立つことはできますか?

+1

シングルの代わりに二重引用符を使用しますか? – jarlh

+1

マニュアルを読む http://dev.mysql.com/doc/refman/5.7/en/exists-and-not-exists-subqueries.html – 2oppin

+1

あなたのタイトルと 'mysql'をグーグル:http://stackoverflow.com/questions/5528854/usage-of-mysqls-if-existsが存在します。 [ask]をお読みください。 – philipxy

答えて

0

MySQLはプログラミングブロック(ストアドプロシージャ、ファンクション、トリガ)でIFステートメントのみをサポートしています。したがって、あなたはそのようにしたいことをすることはできません。

代わりに、あなただけの単一のクエリを記述することができます。

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); 

は実際には、しかし、それは直接一意のこの種を強制するデータベースを持っていることが最善です。あなたはユニーク制約/インデックスを使用して行うことができます。

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

を次にあなたが実行してエラーを無視するクエリを書くことができます:

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

ON DUPLICATE KEYは何もしません - それだけに機能します重複した値が挿入された場合はエラーを返さないようにしてください。

0

IF文の最後にEND IFキーワードがありません。また、このSQL文は、ストアド・プロシージャやストアド・ファンクションなどのルーチン・ブロックでのみ使用できます。

あなたのSQLは次のようにする必要があります:それはMySQLやSQLサーバ

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. ですか?
  2. あなたは誤って入力すると思います。名前= 'Iphone1'。それは 'IphoneZ'でなければなりません。
  3. 一部の場所では一重引用符を使用し、一部の場所では二重引用符を使用しました。

それはmysqlのであれば、AS tmp_table WHERE NOT( 'APPL'、NULL、 'IphoneZ' を10000を選択)から、(PRODUCT_ID、名前、カテゴリ、メーカー) SELECT *クエリ INSERT INTO製品の下にしてみてください存在(Products_arunから1を選択してください。名前= 'IphoneZ' AND製造元= 'appl')LIMIT 1;

それはSQLサーバーでない場合は、存在する場合はその製品INTO INSERT(PRODUCT_ID、名前、カテゴリ、メーカー) VALUES(WHERE名= 'IphoneZ' ANDメーカーが= 'APPL' の製品から1を選択)クエリ 下にしてみてください(10000、 'IphoneZ'、null、 'appl');