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