oracle sql语法 in 的疑问

2025-05-20 06:37:19
推荐回答(3个)
回答1:

简单来讲这是一个书写不规范的SQL语句,容易让人产生歧义。对于多表的嵌套查询规范是每个表都要有别名,指定字段时更要指定是哪个表的字段,这样的代码才清晰易读。

复杂来讲就是人可能产生歧义,但机器不会。写这个语句的人就是利用了机器运行语句时的逻辑去写的代码,更多的是为了增加代码复杂度,妨碍他人阅读理解他的代码。或者就是这个人的编码习惯就是如此,具有某种编码强迫症。

回答2:

in ( select node_id,routing_type from sys_wf_nodes s where s.node_type='001' and s.WF_TABLE_NAME= 'XX' and s.node_type='001')

这个语句里面,routing_type 取的是外层sql中sys_wf_node_conditions 标的routing_type 。
以后写sql,表最好使用别名。以免造成现在的这种让人误解的状态。

回答3:

这个是引用外面主查询中的routing_type,类似相关exists等的子查询,可能是bug?

安全的办法是,指定表名(别名)

http://www.itpub.net/thread-1429387-1-1.html