具有两个内部连接的 PostgreSQL 查询

Posted

技术标签:

【中文标题】具有两个内部连接的 PostgreSQL 查询【英文标题】:PostgreSQL query with two inner joins 【发布时间】:2020-02-12 18:31:14 【问题描述】:

不太适合 SQL 查询,需要一点帮助才能获得具有两个内部联接的有效查询。

这是我的桌子:

帖子 用户 组织

posts/users 共享一个“user_id”键,它允许我拉出帖子表并让它还包括用户表中的用户名。不过我需要提取更多数据。我还需要从 users 表中包含“org_id”,然后从 orgs 表中提取相应的行。

目前我的 SQL 查询是

SELECT p.*, u.username FROM posts p
INNER JOIN users u
ON p.user_id = u.user_id
ORDER BY p.post_id DESC;

这正确地让我获得了存储在帖子表中的帖子的完整列表并包括用户名。

我需要它来包含来自 orgs 表的数据。

因此,如果帖子 #1 是由用户 #2 创建的,我会将这些信息放在一起。我怎样才能让它进行另一个内部联接,该内部联接需要用户 #2 并从用户的相应组织获取完整的数据集?

【问题讨论】:

【参考方案1】:

如果我理解正确,查询将如下:

SELECT p.*, u.username,o.* FROM posts p
INNER JOIN users u
ON p.user_id = u.user_id
INNER JOIN orgs o
ON u.org_id=o.org_id
ORDER BY p.post_id DESC;

您可以了解有关联接的更多信息here。

【讨论】:

【参考方案2】:

您可以以同样的方式加入任意数量的表格。请立即尝试:

SELECT p.*,o.*, u.username FROM posts p
INNER JOIN users u
    ON p.user_id = u.user_id
INNER JOIN ORGS O 
    ON u.org_id = o.org_id 
ORDER BY p.post_id DESC;

更多例子可以在here找到。

【讨论】:

你太棒了!这是完美的。【参考方案3】:

你快到了。只需在另一个连接条件中添加orgs 表:

SELECT p.*, o.*, u.username FROM posts p
INNER JOIN users u
ON p.user_id = u.user_id
INNER JOIN orgs o
ON o.org_id = u.org_id
ORDER BY p.post_id DESC;

【讨论】:

谢谢!这就是我需要的!

以上是关于具有两个内部连接的 PostgreSQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

postgresql 慢查询(dblink 和内部连接)

Postgresql:FROM 中的子查询必须有别名 - 具有多个连接

具有复杂查询和相当大数据集的本地服务器上的 PostgreSQL 超时

SQL 查询数据连接具有它忽略的空值

PostgreSQL 两个连接和它们之间的 NOT EQUAL 子句的性能

postgresql 调用具有相同名称的列