SQL与运算符IN连接

时间:2015-10-07 09:47:42

标签: sql postgresql join

我在使用IN加入两个表时遇到问题。 例如:

with nodes(node_id, mpath) as (
 SELECT node_id, drugs_cls_node_view.mpath
 FROM drugs_cls_entries_view
   inner join drugs_cls_node_view on drugs_cls_node_view.id = node_id
 WHERE mnn_id in (13575)
)
select DISTINCT n.node_id, drugs_cls_node_view.*  
from nodes n
  inner join drugs_cls_node_view
  on drugs_cls_node_view.id in (array_replace(string_to_array(n.mpath, '/'), '', '0')::bigint[])

我得到例外:

  

错误:运算符不存在:bigint = bigint []

1 个答案:

答案 0 :(得分:1)

on drugs_cls_node_view.id in 
  (array_replace(string_to_array(n.mpath, '/'), '', '0')::bigint[])

您在仅包含一个元素的集合中查找ID。该元素是一个数组。 ID永远不会等于数组,因此错误。

您必须取消该阵列的单个值,以便与之比较:

on drugs_cls_node_view.id in 
  (select(unnest(array_replace(string_to_array(n.mpath, '/'), '', '0')::bigint[])))

或者在数组上使用ANY而不是IN:

on drugs_cls_node_view.id = ANY
  (array_replace(string_to_array(n.mpath, '/'), '', '0')::bigint[])

我的代码中可能存在语法错误,因为我不是postgres家伙,但它应该在这里或那里做一点修正: - )