我正在尝试在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"
答案 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
如下:
右侧是带括号的表达式,必须产生一个 数组值。
有关IN
和ANY
等详细信息,请参阅Postgres doc。