【发布时间】:2020-06-17 21:10:31
【问题描述】:
我有 3 个非常简单的表,users、projects 和 starred_projects。
starred_projects 通过用户 ID 和项目 ID 连接其他 2 个表。
CREATE TABLE projects
(
project_id integer,
name character varying(50) COLLATE pg_catalog."default",
creator_id integer,
)
CREATE TABLE users
(
user_id integer,
username character varying(64) COLLATE pg_catalog."default" NOT NULL,
)
CREATE TABLE starred_projects
(
user_id integer NOT NULL,
project_id integer NOT NULL
)
对于给定的用户(例如“foo”),我想显示他 starred 的所有项目。 INNER JOIN 是去这里的正确方式吗?当我这样做时,我的结果总是空的。据我在大学的记忆,我需要其中两个,例如:
SELECT
p.name, u.username // display the name of the project and the user who created it
FROM
projects p
INNER JOIN
starred s
ON
p.creator_id = s.user_id
INNER JOIN
users u
ON
u.user_id = p.creator_id
WHERE
u.username = 'foo'; // display all starred projects of user foo
谁能帮我解决这个问题?
【问题讨论】:
-
你的代码看起来很合理。
-
旁注:对于 postgres,您通常最好使用
TEXT类型而不是 varchar - 请参阅 wiki.postgresql.org/wiki/Don't_Do_This -
我认为您的 JOIN 不正确。为什么你有一个
starred_projects表是你没有正确使用它。projects到starred_projects应由project_id加入。users应该通过user_id加入starred_projects
标签: sql postgresql join