mysql - 从选择查询 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;
解决方案
我认为您需要子查询中的列名:
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);
推荐阅读
- java - JavaFX - 每个设备的 POM、UI 和控制器
- vb.net - 如何在 VB.NET 中用 DataTable 列名填充 ComboBox?
- cmake - 如何在 CMAKEList 中执行外部批处理文件
- python-3.x - python - 如何在Python中的轴上投影某些值?
- spring - Spring Boot 2.1:WebMvcConfigurer#addFormatters(...) 中引发的异常未在 @RestControllerAdvice 中捕获
- java - 计算大多数元音java
- jquery - 来自动态创建的文本框的实时反馈
- javascript - 如何在 foreach 中注册 Promise 并解决所有问题?
- c# - 如何在 SQL Server 中存储哪个用户访问了哪个页面
- r - R中的子集data.frame不会改变回归结果