3

我有一个 MySQL 数据库,我想在一个表中插入一些值,假设我插入的特定值与不同表中的值不匹配。

这是一个简化/示例结构:

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

Table: donotinvite
    name : varchar (index)

假设“名称”与单个语句中的“donotinvite”表中的任何“名称”都不匹配,是否可以有条件地将“名称”和“消息”对插入到“邀请”表中?

大概是这样的吧?

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 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 回答
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 回答
1

这是jonstjohn奇怪删除的答案的重新发布,由我稍作修改:

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

编辑:这不符合我的要求:)。

于 2009-02-16T19:48:37.330 回答