在PostgreSQL中使用JOIN表和数组数据类型的SELECT语句

时间:2019-03-08 11:28:11

标签: postgresql

我有两个名为'tbl_users'和'tbl_order'的表,其中tbl_users具有三个列'id','name','items',其中列'items'的数据类型为 array 和' tbl_orders”具有两列“ id”,“ item”。 我想使用SELECT和JOIN选择所有数据及其顺序。最终结果应包含“ id”,“名称”,“项目”,其中“项目”列应包含用户订购的所有项目。 我正在使用postgreSQL作为数据库。 问题是我可以联接表,但是由于数据类型是数组,因此执行JOIN时会出错。有人建议使用数组数据类型执行JOIN的正确语法。

1 个答案:

答案 0 :(得分:1)

PostgreSQL支持数组运算符,可用于将标识符解析为其各自的订单商品:

SELECT
    u.id,
    u.name,
    CASE WHEN max(o.item) IS NULL THEN NULL ELSE array_agg(o.item) END AS items
FROM tbl_users AS u
LEFT JOIN tbl_orders AS o ON (u.items @> array[o.id])
GROUP BY 1, 2;

在线演示:https://rextester.com/CZDC2260

...将返回:

 id | name | items 
----+------+-------
  1 | john | {A,B}
  2 | kate | {A}
  3 | sue  | 
  4 | ted  | 
(4 rows)