首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >执行insert语句时,获取重复的列名'Unknown‘错误,mysql

问执行insert语句时,获取重复的列名'Unknown‘错误,mysql
EN

Stack Overflow用户
提问于 2019-11-19 07:49:18
回答 3查看 42关注 0票数 1

已创建新的数据库架构/表,并尝试插入值。我的insert查询如下

代码语言:javascript
复制
INSERT INTO `arms`.`lobalarmpriorities`(`id`,`alarmpriority`,`description`)
SELECT * FROM (SELECT 0,'Unknown', 'Unknown') AS tmp
WHERE NOT EXISTS(select id  FROM lobalarmpriorities WHERE id = 0) LIMIT 1;

INSERT INTO `arms`.`lobalarmpriorities`(`id`,`alarmpriority`,`description`)
SELECT * FROM (SELECT 1,'T1', 'T1 - critical – staffed') AS tmp
WHERE NOT EXISTS(select id  FROM lobalarmpriorities WHERE id = 1) LIMIT 1;

在这里,在我的第一个insert查询之后,我得到了以下错误,但第二个insert查询工作正常。

我在这里做错了什么?

代码语言:javascript
复制
Error Code: 1060. Duplicate column name 'Unknown' 
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-11-19 07:53:06

我猜如果你用不同的别名给你的列起别名,结果会是这样的:

代码语言:javascript
复制
INSERT INTO `arms`.`lobalarmpriorities`(`id`,`alarmpriority`,`description`)
SELECT * FROM (SELECT 0 as id,'Unknown' as a, 'Unknown' as b) AS tmp
WHERE NOT EXISTS(select id  FROM lobalarmpriorities WHERE id = 0) LIMIT 1;

第二个查询不会崩溃,因为字符串不同

您还没有为字符串提供别名,所以我的推理是MySQL试图通过从字符串创建别名来提供帮助,但它创建了相同的别名

SQLServer不会让您这样做;它会给出子查询中的列需要别名的错误(并且它不会让您声明两个相同的列别名)。子查询中的列需要别名,这样您就可以明确地引用外部查询中的列-考虑一下这一点:

代码语言:javascript
复制
SELECT x FROM(SELECT 1 as x, 'hello' as x)

MySQL应该向你显示什么?1还是"hello"?

因此,子查询列需要唯一别名

票数 1
EN

Stack Overflow用户

发布于 2019-11-19 07:53:33

您是否需要oly来添加列名

代码语言:javascript
复制
INSERT INTO `arms`.`lobalarmpriorities`(`id`,`alarmpriority`,`description`)
SELECT * FROM (SELECT 0,'Unknown' test, 'Unknown' test1) AS tmp
WHERE NOT EXISTS(select id  FROM lobalarmpriorities WHERE id = 0) LIMIT 1;
票数 1
EN

Stack Overflow用户

发布于 2019-11-19 07:54:26

当您运行这一行- SELECT * FROM (SELECT 0,'Unknown', 'Unknown') AS tmp时,它会感到困惑,因为它将字符串视为一个列名。要想整改,你可以改成;

代码语言:javascript
复制
INSERT INTO `arms`.`lobalarmpriorities`(`id`,`alarmpriority`,`description`)
SELECT * FROM (SELECT 0 as id,'Unknown' AS colA, 'Unknown' AS colB) AS tmp
WHERE NOT EXISTS(select id  FROM lobalarmpriorities WHERE id = 0) LIMIT 1;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58924606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档