我正在尝试进行一些查询但是我一直在收到错误,现在我认为mysql安装有问题。有人能告诉我这个查询是否有错误吗?
SELECT settings.ID,
settings.name,
settings.description,
NVL2(userSettings.value, userSettings.value, settings.default)
FROM settings
LEFT OUTER JOIN userSettings ON (settings.ID = userSettings.settingID)
我得到的错误说函数databaseX.NVL2不存在
答案 0 :(得分:2)
当建议使用ANSI标准等效替代方案时,我建议远离供应商特定功能。例如,NVL和IFNULL可以(通常)用COALESCE替换。
你也可以使用CASE WHEN
,这意味着在下行方面会有更多的打字,但好处是有SQL Server背景的人不需要处理Oracles DECODE()或NVL或者NVL2,因为逻辑就在代码中。
答案 1 :(得分:1)
这可能是因为NVL2是Oracle功能,而不是MySQL功能。我相信你在MySQL中寻找的功能是COALESCE()
答案 2 :(得分:1)
正如@Eric Petroelje所说,NVL2()
是Oracle功能,而不是MySQL。但是MySQL有自己的等价物,可以在这种情况下使用:IFNULL()
:
SELECT ... IFNULL(userSettings.value, settings.default) ...
答案 3 :(得分:1)
经过多次尝试和错误探测,我发现这种方法可以模拟Oracle的NVL2功能。它不是很优雅,但它有效
SELECT IF(LENGTH(ISNULL(FieldName, '')) > 0, 'Not NULL Value', 'Null Value') FROM TableName
答案 4 :(得分:0)
我认为这可以帮到你
如果expr1为TRUE(expr1<> 0且expr1<> NULL),则IF()返回expr2;否则返回expr3。 IF()返回数值或字符串值,具体取决于使用它的上下文。
答案 5 :(得分:0)
或者,您可以将NVL2替换为:
IF (userSettings.value IS NULL, userSettings.value, settings.default)