连接谓词中的IN运算符

时间:2015-03-19 04:58:38

标签: postgresql join

我正在尝试在Postgresql中加入2个表。 table1中的Col1的类型为字符变化,table2中的col2的类型为字符变化[]

有人知道为什么使用IN运算符不起作用吗?

这是查询:

SELECT t1.*, t2.* FROM table1 t1 INNER JOIN table2 t2 ON t1.col1 in t2.col2

这是错误: ERROR: syntax error at or near "t2"

另外, SELECT t1.*, t2.* FROM table1 t1 INNER JOIN table2 t2 ON t1.col1 in unnest(t2.col2)

失败了 ERROR: syntax error at or near "unnest"

1 个答案:

答案 0 :(得分:1)

使用您目前拥有的代码,IN表达式的两边都是单个值。对于IN,右侧应该是一个数组或多值表达式,而不是奇异值。

如果它们确实是单个值,那么你想要的是:

SELECT t1.*, t2.*
FROM table1 t1 INNER JOIN table2 t2 ON t1.col1 = t2.col2;

如果右侧确实有一个列表表达式,你可以这样做:

SELECT t1.*, t2.*
FROM table1 t1 INNER JOIN table2 t2 ON t1.col1 IN (t2.col2, t2.col3);

根据OP的评论进行编辑:

IN无法在数组上运行。相反,它在上运行。您可以尝试使用ANY代替,它可以在数组上运行。

该文档将IN描述为:

  

右侧是带括号的标量表达式列表。

ANY如下:

  

右侧是带括号的表达式,必须产生一个   数组值。

有关INANY等详细信息,请参阅Postgres doc