首页 > 解决方案 > 从选择查询 MySql 插入记录其他更新

问题描述

如果此查询中不存在更新,我该如何使用?

INSERT INTO MyTbl(name, address, tele)
SELECT * FROM (SELECT 'Rupert', 'Somewhere', '022') AS tmp
WHERE NOT EXISTS (
SELECT name FROM MyTblWHERE name = 'Rupert'
) LIMIT 1;

我试过了,但这会引发错误。

INSERT INTO MyTbl(name, address, tele)
SELECT * FROM (SELECT 'Rupert', 'Somewhere', '022') AS tmp
WHERE NOT EXISTS (
SELECT name FROM MyTblWHERE name = 'Rupert'
) LIMIT 1 ON DUPLICATE KEY UPDATE name = tmp.Name;

标签: mysqlsql

解决方案


我认为您需要子查询中的列名:

INSERT INTO MyTbl (name, address, tele)
    SELECT name, address, tele
    FROM (SELECT 'Rupert' as name, 'Somewhere' as address, '022' as tele
         ) t
    ON DUPLICATE KEY UPDATE name = t.Name;

您不需要EXISTS检查 - 如果您使用ON DUPLICATE KEY. 如果您没有唯一键,那么大概您想要:

create index unq_mytbl_name on mytbl(name);

同样,LIMIT 1无关紧要:您的数据只有一行。

对于单行,您可能会发现这样写更方便:

INSERT INTO MyTbl (name, address, tele)
    VALUES ('Rupert', 'Somewhere', '022')
    ON DUPLICATE KEY UPDATE name = VALUES(Name);

推荐阅读