在mysql中同时使用concat和子字符串/子字符串索引时出现SQL错误1166
我在mysql中同时使用concat和substring_index时遇到了一个奇怪的错误,我的代码在这里在mysql中同时使用concat和子字符串/子字符串索引时出现SQL错误1166,mysql,Mysql,我在mysql中同时使用concat和substring_index时遇到了一个奇怪的错误,我的代码在这里 CREATE TEMPORARY TABLE candidate (ori int, dest int, myPath varchar(500), depth int ) as ( select transforms.ori, baseTransforms.dest, concat(substring_index(baseTransforms.road,',',-1),',',su
CREATE TEMPORARY TABLE candidate (ori int, dest int, myPath varchar(500), depth int ) as (
select transforms.ori, baseTransforms.dest, concat(substring_index(baseTransforms.road,',',-1),',',substring_index(transforms.road,',',1)), 2
from transforms, baseTransforms
where transforms.dest=baseTransforms.ori and transforms.ori <> baseTransforms.dest);
baseTransform的数据是这样填充的
insert into baseTransforms select * from transforms;
然后我得到
错误代码:1166。不正确的列名“concatsubstring_indexbaseTransforms.road”,,,,-1,,,substring_indextransforms.road,,,,,1”
但是当我通过删除一个子串索引阶段来修改代码时,它不会引发错误,即
CREATE TEMPORARY TABLE candidate (ori int, dest int, myPath varchar(500), depth int ) as (
select transforms.ori, baseTransforms.dest, concat(',',substring_index(transforms.road,',',1)), 2
from transforms, baseTransforms
where transforms.dest=baseTransforms.ori and transforms.ori <> baseTransforms.dest);
及
这两种方法都很有效,所以事实上两个列名都是正确的,这太令人困惑了
p、 当我尝试使用子字符串函数而不是子字符串索引时,它遇到了同样的问题
有人能帮我解决这个问题吗?,但是默认情况下,成为子查询中列名的CONCAT表达式超出了这个范围
您可以在其后面加上“路径”或类似名称,为该列指定一个固定的短名称。非常感谢!我以前不知道concat表达式的结果会默认成为列名。
CREATE TEMPORARY TABLE candidate (ori int, dest int, myPath varchar(500), depth int ) as (
select transforms.ori, baseTransforms.dest, concat(',',substring_index(transforms.road,',',1)), 2
from transforms, baseTransforms
where transforms.dest=baseTransforms.ori and transforms.ori <> baseTransforms.dest);
CREATE TEMPORARY TABLE candidate (ori int, dest int, myPath varchar(500), depth int ) as (
select transforms.ori, baseTransforms.dest, concat(substring_index(baseTransforms.road,',',-1),','), 2
from transforms, baseTransforms
where transforms.dest=baseTransforms.ori and transforms.ori <> baseTransforms.dest);