3

成分テーブルが存在しない場合、成分を挿入しようとしています。次の構文を使用しています。

INSERT INTO ingredient(Name) 
(
 SELECT 'ingName' FROM dummytable WHERE 
(SELECT count(*) FROM ingredient WHERE Name = 'ingName')=0)

SELECT クエリが目的の結果 ("ingName" を含むエントリ) を返すように見えても、これは機能していないようです (0 行が影響を受けます)。

「成分」テーブルには、名前、ID (ID は自動インクリメント) の 2 つの列があります。

ありがとう、リー

4

2 に答える 2

7

name列に一意のインデックスを追加することをお勧めします。

ALTER TABLE `ingredient` ADD UNIQUE(`Name`)

それを行った後、次を使用できますINSERT IGNORE

INSERT IGNORE INTO `ingredient` ... /* anything */
于 2012-05-13T19:20:55.303 に答える
3

これは、内側のクエリSELECT count(*) FROM ingredient WHERE Name = 'ingName'が値 > 0 を返しているため、上位のクエリSELECT 'ingName' FROM dummytable WHEREが行を選択していないため、挿入が行われていないためです。

2列のテストテーブルで同じことを試してみましたが、name|valueうまくいきました

    INSERT INTO test1(name) (
    SELECT 'name' FROM test2 WHERE  
   (
      SELECT count(*) FROM test2 WHERE name = 'bilboa'
     )
   =0
   ) 

name選択クエリとテストテーブルの2行で選択している値の原因で2行を挿入しました。

于 2012-05-13T19:14:40.080 に答える