我在使用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 []
答案 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家伙,但它应该在这里或那里做一点修正: - )