代码之家  ›  专栏  ›  技术社区  ›  postfuturist

在MySQL中,如何在另一个表中不存在值的情况下插入表中?

  •  3
  • postfuturist  · 技术社区  · 15 年前

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

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

    假设“name”与“donotinvite”表中的任何“name”都不匹配,并且只有一条语句,是否可以在“invites”表中有条件地插入“name”和“message”对?

    也许是这样的?

    INSERT INTO invites
        SET name = 'joe', message = 'This is an invite'
    WHERE NOT EXISTS 
        (SELECT name 
        FROM donotinvite
        WHERE name = 'joe')
    
    5 回复  |  直到 15 年前
        1
  •  4
  •   Quassnoi    15 年前
    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
    
        2
  •  3
  •   Kristen    15 年前

    (我是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
    )
    
        3
  •  2
  •   Jeremy DeGroot    15 年前

    这样做行得通,但我不确定会不会那么好。它可能适用于您的应用程序:

    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 ,可以向其发送邀请的所有人的目录?

        4
  •  2
  •   Yoseph    12 年前
    INSERT INTO invites (name, message) 
    SELECT 'joe', 'This is an invite' FROM (SELECT 1) t 
    WHERE NOT EXISTS (SELECT * FROM donotinvite WHERE name = 'joe');
    
        5
  •  1
  •   Community Ian Goodfellow    7 年前

    以下是对 jonstjohn

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

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