3

MySQLデータベースがあり、挿入している特定の値が別のテーブルの値と一致しないと仮定して、1つのテーブルにいくつかの値を挿入したいと思います。

簡略化された/例の構造は次のとおりです。

Table: invites
    id : int (auto-increment index)
    name : varchar
    message : varchar

Table: donotinvite
    name : varchar (index)

'name'が'donotinvite'テーブルの'name'と単一のステートメントで一致しないと仮定して、'name'と'message'のペアを'invites'テーブルに条件付きで挿入することは可能ですか?

このようなもの、おそらく?

INSERT INTO invites
    SET name = 'joe', message = 'This is an invite'
WHERE NOT EXISTS 
    (SELECT name 
    FROM donotinvite
    WHERE name = 'joe')
4

5 に答える 5

4
INSERT
INTO invites (name, message)
SELECT a.name, a.message
FROM (SELECT @name AS name, @message AS message) a
LEFT JOIN donotinvite d
ON a.name = d.name
WHERE d.name IS NULL
于 2009-02-16T19:25:16.170 に答える
3

(私はMSSQLの担当者なので、すべてがMySQLに適しているかどうかはわかりません)

INSERT INTO invites
(
    name, message
)
SELECT name = 'joe', message = 'This is an invite'
WHERE NOT EXISTS 
    (SELECT *
    FROM donotinvite
    WHERE name = 'joe')

実際には、すべての名前/メッセージを一時テーブルに入れてから、次のようにします。

INSERT INTO invites
(
    name, message
)
SELECT T.name, T.message
FROM MyTempTable AS T
WHERE NOT EXISTS 
(
    SELECT *
    FROM donotinvite AS DNI
    WHERE DNI.name = T.name
)
于 2009-02-16T19:12:02.223 に答える
2
INSERT INTO invites (name, message) 
SELECT 'joe', 'This is an invite' FROM (SELECT 1) t 
WHERE NOT EXISTS (SELECT * FROM donotinvite WHERE name = 'joe');
于 2012-10-31T03:56:10.233 に答える
2

これでうまくいきますが、うまく機能するかどうかはわかりません。あなたのアプリケーションでうまくいくかもしれません:

INSERT INTO invites(name, message) 
SELECT p.name, "This is an invite" 
FROM people AS p  
WHERE p.name NOT IN (SELECT name FROM donotinvite);

people招待状を送ることができるすべての人のカタログのような表がありますか?

于 2009-02-16T19:20:37.473 に答える
1

これは、 jonstjohnの奇妙に削除された回答の再投稿です。私が少し変更しました。

INSERT INTO invites (name, message) 
    SELECT 'joe','This is an invite' 
    FROM donotinvite 
    WHERE name <> 'joe'

編集:これは私が望むことをしません:)。

于 2009-02-16T19:48:37.330 に答える