在预期位置找不到FROM陈述

问题描述

我有以下查询

SELECT ut1.*,IF NULL(ut2.status,0) status 
FROM user_permissions ut1 
LEFT JOIN  
(SELECT * FROM user_permission_data WHERE user_id = 1) 
 ut2 ON ut1.id = ut2.options_id

运行查询后,我会收到类似的错误消息

ORA-00923: FROM keyword not found where expected

我尝试将FROM关键字移到ut2之后,但是仍然有问题。我在哪里弄错了?此查询有什么问题?为什么会出现这种错误

解决方法

使用NVL(x1,x2)合并空值。

SELECT 
  ut1.*,NVL(ut2.status,0) status 
FROM user_permissions ut1 
LEFT JOIN  
(SELECT * FROM user_permission_data WHERE user_id = 1) 
 ut2 ON ut1.id = ut2.options_id
,

子查询是不必要的。我建议:

SELECT up.*,COALESCE(UPD.status,0) status 
FROM user_permissions up LEFT JOIN  
     user_permission_data upd
     ON up.id = upd.options_id AND upd.user_id = 1 ;

我还强烈建议您使用有意义的表别名(表名的缩写),而不要使用任意的,毫无意义的别名。