假设我有以下表格:
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"不存在
有什么想法我应该如何重新安排我的查询? 感谢
答案 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 |