为什么postgresql认为这个子查询列名不完全合格和含糊不清

时间:2013-01-26 14:41:43

标签: sql postgresql plpgsql ambiguity columnname

  Select distinct A.col1, B.col2, col3
   from A inner join B on A.id = B.id
   and B.id in 

       (select distinct col2 from B where ..... )

PostgreSQL的plpgsql解析器不喜欢括号子查询中的不合格“col2”。由于子查询中只提到了一个表,因此解析器不会产生歧义吗?

2 个答案:

答案 0 :(得分:2)

没有。外部查询列也可以在子查询中使用,否则您无法将内部和外部查询绑定在一起。这是一件容易忘记的事情,如果你没想到的话可以把你赶出去。

答案 1 :(得分:1)

您显示的SQL查询只会起作用。

既然你提到了 plpgsql ,那么我在黑暗中的镜头就是你只显示实际上是plpgsql函数的片段,并且你遇到了与函数参数的命名冲突,这些参数是可见的函数体中的任何地方(动态SQL除外)。