错误代码:1305。FUNCTION sql_univeristy 解码不存在
Error Code: 1305. FUNCTION sql_univeristy decode does not exist
我在 MySQL 中使用此查询时遇到错误。
这里是查询。
select course_id, sec_id, ID,
decode(name, NULL, '−', name)
from (section natural left outer join teaches)
natural left outer join instructor
where semester='Spring' and year=2010
这是错误
错误代码:1305。功能 sql_univeristy 解码不存在
是的,mySQL 中不存在 DECODE。有一个类似的 ELT 功能,但我认为不完全相同,而且您的用例并不真正需要它。 COALESCE 可能是您想要的,但这里有四种不同的方法:
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=f9d37a049fc503b1b4848b7e278f2e34
create table test (name varchar(20));
insert into test(name) values('test'), ('jim'), (null);
select * from test;
SELECT name,
coalesce(name, '-') as method1,
if(name is null, '-', name) as method2,
case when name is null then '-' else name end as method3,
elt((name is null) + 1, name, '-') as method4
FROM test
COALESCE return是第一个非空参数。 IF 不符合 ANSI,但它允许条件逻辑,就像 CASE 一样(并且 CASE 是 ANSI 兼容,因此您可以将它从一个 rdbms 移植到另一个 rdbms)。
最后是 ELT。这只是 returns 与提供的索引匹配的参数。因此,您可以使用 IS NULL 来测试名称,如果是 return 则为 1,否则为 0。由于如果索引小于 1,则 ELT returns null,因此您必须在 IS NULL 检查中加一。这绝对不如其他选项简单,我不会为了做一个简单的空值检查而经历所有这些。如果这就是您想要做的全部,那么 COALESCE 是您的不二之选。
我在 MySQL 中使用此查询时遇到错误。
这里是查询。
select course_id, sec_id, ID,
decode(name, NULL, '−', name)
from (section natural left outer join teaches)
natural left outer join instructor
where semester='Spring' and year=2010
这是错误 错误代码:1305。功能 sql_univeristy 解码不存在
是的,mySQL 中不存在 DECODE。有一个类似的 ELT 功能,但我认为不完全相同,而且您的用例并不真正需要它。 COALESCE 可能是您想要的,但这里有四种不同的方法:
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=f9d37a049fc503b1b4848b7e278f2e34
create table test (name varchar(20));
insert into test(name) values('test'), ('jim'), (null);
select * from test;
SELECT name,
coalesce(name, '-') as method1,
if(name is null, '-', name) as method2,
case when name is null then '-' else name end as method3,
elt((name is null) + 1, name, '-') as method4
FROM test
COALESCE return是第一个非空参数。 IF 不符合 ANSI,但它允许条件逻辑,就像 CASE 一样(并且 CASE 是 ANSI 兼容,因此您可以将它从一个 rdbms 移植到另一个 rdbms)。
最后是 ELT。这只是 returns 与提供的索引匹配的参数。因此,您可以使用 IS NULL 来测试名称,如果是 return 则为 1,否则为 0。由于如果索引小于 1,则 ELT returns null,因此您必须在 IS NULL 检查中加一。这绝对不如其他选项简单,我不会为了做一个简单的空值检查而经历所有这些。如果这就是您想要做的全部,那么 COALESCE 是您的不二之选。