mysql 第1166章.列名不正确

fquxozlt  于 2023-05-16  发布在  Mysql
关注(0)|答案(4)|浏览(226)

当我尝试运行一个例程时,我得到以下错误:
错误代码:1166列名“学校”不正确。学校名称 = case when School.Web School Name is null then School.学校名称 els'
我仔细检查了列名,实际上有一个School.School Name。没有前导空格或尾随空格。下面是错误所引用的例程的开头:

CREATE temporary TABLE tt_Step1
SELECT DISTINCT State.Code, State.Name, 
School.`School Name` = case 
    when School.`Web School Name` is null then School.`School Name`
    else School.`Web School Name`
    end,
School.`School ID` 
-- Into tt_Step1
FROM State LEFT JOIN School ON State.Code = School.State 
Where (School.`School ID` <> ...

我最近将这段代码从MSSQL转换为MySQL,所以可能有我遗漏的东西,但我找不到任何错误。原始MSSQL查询在SQL Server Management Studio中运行正常,但在MySQL中转换后的版本却不能。

h79rfbju

h79rfbju1#

在我的例子中,它是由列名后的不可见的额外空格引起的。我写了promotion-ids而不是promotion-id

dbf7pr2w

dbf7pr2w2#

给予这个:

CREATE temporary TABLE tt_Step1
SELECT DISTINCT State.Code, State.Name, 
coalesce(School.`Web School Name`, School.`School Name`),
School.`School ID` 
-- Into tt_Step1
FROM State LEFT JOIN School ON State.Code = School.State 
Where (School.`School ID` <> ...
0s7z1bwu

0s7z1bwu3#

你有几个问题。
1.不能为具有多部分名称(如School.School Name)的列设置别名。

  1. MySQL中的别名是用blah as ColumnName完成的,而不是ColumnName = blah
6tdlim6h

6tdlim6h4#

我也遇到过类似的问题。我的问题通过在case语句中添加一个列名解决了。
示例:

Case

  when val <.5 then "low"

  when val >1 then "high"

end as valTest

如果没有as valTest,我会得到1166错误。

相关问题