2015-10-07 203 views
0

我在使用IN加入兩個表時遇到問題。 例子:SQL加入運營商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[]) 

我得到異常:

ERROR: operator does not exist: bigint = bigint[]

+3

答案是肯定的,你可以使用IN連接兩個表。 – jarlh

+0

@jarlh但我得到了異常:'錯誤:操作符不存在:bigint = bigint []' – Wolkodav

+0

請[將您的查詢簡化爲重現問題所需的最小值](http://stackoverflow.com/help/mcve) 。這會讓問題更加明確。 – IMSoP

回答

1

隨着

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

您要查找的ID在只包含一個元素的集合。這個元素是一個數組。 ID不能等於數組,因此錯誤。

必須UNNEST數組都是單值與比較:

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

或使用任何陣列,而不是在:

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

有可能是在我的代碼語法錯誤,因爲我不是postgres傢伙,但它應該可能在這裏或那裏稍微修正:-)

+0

爲什麼在這個查詢中'ANY'與'LIKE'相比較慢? – Wolkodav

+0

我不明白這個問題,但不是一個postgres的人,我不太可能回答它:-)數組和'= ANY'是特殊的PostgreSQL特性。 –