我有一个MySQL数据库,我想在一个表中插入一些值,假设我插入的特定值与另一个表中的值不匹配。
这是一个简化/示例结构:
Table: invites
id : int (auto-increment index)
name : varchar
message : varchar
Table: donotinvite
name : varchar (index)
是否有可能在'邀请'表中有条件地插入'name'和'message'对,假设'name'与'donotinvite'表中的任何'name'都没有匹配?
也许是这样的事情?
INSERT INTO invites
SET name = 'joe', message = 'This is an invite'
WHERE NOT EXISTS
(SELECT name
FROM donotinvite
WHERE name = 'joe')
答案 0 :(得分: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
答案 1 :(得分: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
)
答案 2 :(得分: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
这样的表格,这是你可以邀请的所有人的目录吗?
答案 3 :(得分: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');
答案 4 :(得分:1)
以下是重新发布的jonstjohn奇怪删除的答案,我稍作修改:
INSERT INTO invites (name, message)
SELECT 'joe','This is an invite'
FROM donotinvite
WHERE name <> 'joe'
编辑:这不符合我的要求:)。