4

この質問に続いて、データが空の場合にのみテーブルにデータを挿入するという正しい答えを模倣しようとしています。

テーブルが空の場合はINSERTを実行しますか?

これは私のコードです:

INSERT INTO `statuses` SELECT 
    ('Something', 'Something else', 123),
    ('Something', 'Something else', 234)
    WHERE NOT EXISTS (SELECT * FROM `statuses`);

しかし、テーブルが空の場合に要素を追加する代わりに、次のようになります。

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE NOT EXISTS (SELECT * FROM `statuses`)'

テーブルが空の場合にのみ値が挿入されるように、クエリをどの程度正確に記述する必要がありますか?

4

2 に答える 2

3

ステートメントに構文エラーがあります:

INSERT INTO `statuses`
    (SELECT  'Something', 'Something else', 123
     WHERE NOT EXISTS (SELECT * FROM `statuses`)
    ) union all
    (SELECT 'Something', 'Something else', 234
     WHERE NOT EXISTS (SELECT * FROM `statuses`)
    );

whereこの場合、サブクエリごとに1回ずつ、2回繰り返す必要があります。次のこともできます。

INSERT INTO `statuses`
    select t.*
    from ((SELECT  'Something' as col1, 'Something else' as col2, 123 as col3
          ) union all
          (SELECT 'Something', 'Something else', 234
          )
         ) t
    WHERE NOT EXISTS (SELECT * FROM `statuses`);

このバージョンでは、列に名前を割り当てる必要があります。

または、2つの別々の挿入ステートメントを使用することもできます。

于 2013-03-25T01:06:57.650 に答える
1

正しい構文は次のとおりです。

INSERT INTO user_authentication
SELECT t.*
FROM ((SELECT 1 as col1, 'kingston' as col2, 'test' as col3, true as col4)) t
WHERE NOT EXISTS (SELECT * FROM user_authentication);

これは私のために働いています。

于 2014-08-21T09:34:12.783 に答える