Postgres加入了

时间:2015-11-01 20:25:37

标签: database postgresql join relation unnest

假设我有以下表格:

table: followers_arrays

   id   |  array
--------+---------
    1   | {3,4,5}


table: small_profiles

   id   | username |  pic    
--------+----------+-------
    3   |   aaaa   | abcd
    4   |   bbbb   | abcd
    5   |   cccc   | abcd

我想使用简单的JOIN打印 followers_array 来自 small_profiles 的填充数据。

首先,我使用 unfst 这样的功能:

SELECT id, unnest(followers_array) AS elem FROM followers_arrays 

它给了我正确的结果:

   id   |  elem  
--------+--------
    1   |    3
    1   |    4
    1   |    5

现在,根据我的理解,我只需要将此数据加入 small_profiles ON small_profiles.id 键,如下所示:

SELECT id, unnest(followers_array) AS elem 
FROM followers_arrays 
JOIN small_profiles ON small_profiles.instagram_id = elem

然而,似乎在JOIN期间,列 elem 尚未创建,因为我收到以下错误: 错误:列" elem"不存在

有什么想法我应该如何重新安排我的查询? 感谢

2 个答案:

答案 0 :(得分:3)

这是糟糕的设计,但这是你的答案:

select f.id, f.follower, s.username, s.pic
from
    (
        select id, unnest("array") as follower
        from followers_arrays
    ) f
    inner join
    small_profiles s on f.follower = s.id

答案 1 :(得分:0)

我更喜欢在子查询上使用公用表表达式:

<?php

use Interfaces\Item;

class MyClass
{
    public function __construct(array $items)
    {
        // Do stuff
    }
}


$myclass = new MyClass([$item1, $item2 ,...]); //php7.*

$myclass = new MyClass(array($item1, $item2 ,...)); //php5.*

产生

WITH unnested_arr_1 AS (
    SELECT unnest(ARRAY[1, 2, 3]) array_1_item
)
,unnested_arr_2 AS (
    SELECT unnest(ARRAY[2, 3, 4]) array_2_item
)
SELECT  *
FROM    unnested_arr_1 arr1
    FULL OUTER JOIN unnested_arr_2 arr2 ON arr1.array_1_item=arr2.array_2_item

如果只加入unnested数组,那么上面的查询可以简化如下:

array_1_item |array_2_item |
-------------|-------------|
1            |[NULL]       |
2            |2            |
3            |3            |
[NULL]       |4            |