已创建新的数据库架构/表,并尝试插入值。我的insert查询如下
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查询工作正常。
我在这里做错了什么?
Error Code: 1060. Duplicate column name 'Unknown' 发布于 2019-11-19 07:53:06
我猜如果你用不同的别名给你的列起别名,结果会是这样的:
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不会让您这样做;它会给出子查询中的列需要别名的错误(并且它不会让您声明两个相同的列别名)。子查询中的列需要别名,这样您就可以明确地引用外部查询中的列-考虑一下这一点:
SELECT x FROM(SELECT 1 as x, 'hello' as x)MySQL应该向你显示什么?1还是"hello"?
因此,子查询列需要唯一别名
发布于 2019-11-19 07:53:33
您是否需要oly来添加列名
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;发布于 2019-11-19 07:54:26
当您运行这一行- SELECT * FROM (SELECT 0,'Unknown', 'Unknown') AS tmp时,它会感到困惑,因为它将字符串视为一个列名。要想整改,你可以改成;
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;https://stackoverflow.com/questions/58924606
复制相似问题