GBase 8s中有一些特殊的关键字,比如rowid,rownum这样的,可以直接在查询语句中直接使用,表示特定的含义。
这种类型的关键字,在使用到表上时需要特别小心,否则可能得非预想要的结果。
如:
select * from tab1 where default_role like '%N%';
表面上的意思是:查询tab1中default_role字段中包含'N'字符的数据,select * from tab1返回的default_role字段中也有包含'N'的数据。但它却返回了空结果?!为什么呢?
原因就是DEFAULT_ROLE是内置关键字,直接写DEFAULT_ROLE是获取当前用户的默认角色,当前默认角色名并不包含'N',因此该语句应该改成
select * from tab1 where tab1.default_role like '%N%';
也就是说:使用表名/表别名限制定符.字段名称时,SQL才会正确解析为字段名称。这也只是规避方法,更合理的方式是:不使用保留的关键字做表名、字段和别名。
注:对于其关键字,也适合于使用 表名/表别名限制定符.字段名称 的方式。