2
  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”。由于子查询中只提到了一个表,解析器不是制造了一个没有的歧义吗?

4

2 回答 2

2

不可以。子查询中也可以使用外部查询列,否则您无法将内部查询和外部查询绑定在一起。这是一件很容易忘记的事情,如果你不期待它,它会抓住你。

于 2013-01-26T15:13:39.063 回答
2

像您显示的 SQL 查询就可以工作。

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

于 2013-01-26T17:53:13.240 回答