【发布时间】:2021-04-04 04:54:30
【问题描述】:
这些是我的桌子。
CREATE TABLE IF NOT EXISTS categories (
category_id serial primary key,
category text not null,
user_id int not null
);
CREATE TABLE IF NOT EXISTS activities (
activity_id serial primary key,
activity text not null,
user_id int not null
);
CREATE TABLE IF NOT EXISTS categories_to_activities (
category_id int not null REFERENCES categories (category_id) ON UPDATE CASCADE ON DELETE CASCADE,
activity_id int not null REFERENCES activities (activity_id) ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT category_activity_pkey PRIMARY KEY (category_id, activity_id)
);
这是我用来获取所有活动及其类别的查询。
SELECT a.*, ARRAY_AGG ( ROW_TO_JSON (c) ) categories
FROM activities a
JOIN categories_to_activities ca ON a.activity_id = ca.activity_id
JOIN categories c ON ca.category_id = c.category_id
WHERE a.user_id = ${userId}
GROUP BY a.activity_id
问题是,如果活动没有分配类别,则不会返回。
我无法将JOIN 与CASE 结合起来,我想这是我需要的。本质上,我只想在categories_to_activities 中有记录时才JOIN?
我该怎么做?
【问题讨论】:
标签: sql postgresql join select