【发布时间】:2019-09-03 18:05:01
【问题描述】:
我在 PostgreSQL 数据库中有三个表,如下所示:https://imgur.com/a/bUapsYi
一个用户可以属于多个项目,一个项目可以有多个用户,我通过一个名为“userprojects”的连接表将它们联系在一起。
每个表可能如下所示:
User
| id | firstname | lastname | email |
|----|-----------|----------|----------------|
| 1 | Joe | Green | joe@green.com |
| 2 | Olle | Svensson | olle@gmail.com |
| 3 | Erik | Yapp | erik@yapp.com |
Project
| id | name | owner |
|----|---------------|----------------|
| 1 | Project X | joe@green.com |
| 2 | Peanut Butter | olle@gmail.com |
| 3 | Apollo 11 | erik@yapp.com |
| 4 | RCPP | erik@yapp.com |
Userprojects
| id | user_id | project_id |
|----|---------|------------|
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 2 | 3 |
| 4 | 3 | 3 |
是否有某种形式的内部(?)连接让我查询项目中的用户(例如,userprojects 中的 user_id)或者用户是否是项目的所有者?
在上面的示例中,内连接查询如下所示:
SELECT "project".id, "project".name, "email"
FROM userprojects
INNER JOIN project ON userprojects.project_id = project.id
INNER JOIN "user" ON userprojects.user_id = "user".id
会返回这个:
| id | name | email |
|----|---------------|----------------|
| 1 | Project X | joe@green.com |
| 2 | Peanut Butter | joe@green.com |
| 3 | Apollo 11 | olle@gmail.com |
| 4 | Apollo 11 | erik@yapp.com |
如果在该内部联接查询中找不到每个项目的所有者,我希望添加到查询结果中的内容也是 - 请注意 erik@yapp.com 是项目 RCPP 的所有者,但由于未找到该关系在userprojects 表中,它不会在查询中返回。我能否以某种方式让我的查询返回这些用户,例如:
| id | name | email |
|-----|---------------|----------------|
| 1 | Project X | joe@green.com |
| 2 | Peanut Butter | joe@green.com |
| 3 | Apollo 11 | olle@gmail.com |
| 4 | Apollo 11 | erik@yapp.com |
| (?) | RCPP | erik@yapp.com |
【问题讨论】:
标签: postgresql