如何对 JSONB PostgresQL 执行足够的操作
How to perfom adequate operations on JSONB PostgresSQL
假设我有
sequelize.query('SELECT associations FROM users WHERE id = :id')
associations
是一个 JSONB ARRAY 列
输出看起来像这样
[
{
"role": 2,
"shop_id": 1,
"admin_id": 1,
"manager_id": null
}
]
我想遍历数组并使用这些 ID 搜索那些关联
我想在同一个查询中执行所有操作。
我有一个role table, shop table, users table
进度
所有列都显示为 null
如果association是jsonb[]
类型的列,则使用unnest(association)
来扩展第一级元素。
然后你可以尝试这样的事情,假设所有 id
都是整数类型:
sequelize.query('
SELECT *
FROM users
CROSS JOIN LATERAL unnest(associations) AS j
LEFT JOIN role AS r
ON (j->>\'role\') :: integer = r.id
LEFT JOIN shop AS s
ON (j->>\'shop_id\') :: integer = s.id
LEFT JOIN users AS a
ON (j->>\'admin_id\') :: integer = a.id
LEFT JOIN users AS m
ON (j->>\'manager_id\') :: integer = m.id
WHERE id = :id'
)
假设我有
sequelize.query('SELECT associations FROM users WHERE id = :id')
associations
是一个 JSONB ARRAY 列
输出看起来像这样
[
{
"role": 2,
"shop_id": 1,
"admin_id": 1,
"manager_id": null
}
]
我想遍历数组并使用这些 ID 搜索那些关联
我想在同一个查询中执行所有操作。
我有一个role table, shop table, users table
进度
如果association是jsonb[]
类型的列,则使用unnest(association)
来扩展第一级元素。
然后你可以尝试这样的事情,假设所有 id
都是整数类型:
sequelize.query('
SELECT *
FROM users
CROSS JOIN LATERAL unnest(associations) AS j
LEFT JOIN role AS r
ON (j->>\'role\') :: integer = r.id
LEFT JOIN shop AS s
ON (j->>\'shop_id\') :: integer = s.id
LEFT JOIN users AS a
ON (j->>\'admin_id\') :: integer = a.id
LEFT JOIN users AS m
ON (j->>\'manager_id\') :: integer = m.id
WHERE id = :id'
)