【发布时间】:2021-08-24 12:56:29
【问题描述】:
如何显示一列中的不同值,并在同一行中显示另一列中的一个值?这可能是最容易用示例输出来解释的,如下所示。
查询应该只返回与permission 列中不同值相同的行数,在本例中为两个。
如果permission 列具有select,则该行将在username 列中显示Alice 或Bob。如果permission 列具有insert,则该行将在username 列中显示Carol、Alice、Bob 或David。
如果每次返回不同的usernames 也没关系。性能不是关键因素 - 每个表的行数将少于几十行。
users_and_permissions 表
| username | permission |
|---|---|
| Alice | select |
| Bob | select |
| Carol | insert |
| Alice | insert |
| Bob | insert |
| David | insert |
输出#1
| username | permission |
|---|---|
| Alice | select |
| Carol | insert |
输出#2
| username | permission |
|---|---|
| Bob | select |
| Bob | insert |
输出#3
| username | permission |
|---|---|
| Bob | select |
| David | insert |
输出#4
| username | permission |
|---|---|
| Alice | select |
| David | insert |
编辑:我从原始帖子中删除了我的 SQL,因为它使用了两个表和一个带有 DISTINCT ON 子句的连接。
【问题讨论】:
-
您尝试过使用 DISTINCT ON 吗? postgresql.org/docs/current/sql-select.html
-
@JuliusTuskenis 是的 - 该条款是我的问题的一部分。
-
请在不使用 SQL 的情况下解释您如何到达每个输出的逻辑。 IE。解释为什么输出#2 包含 Bob/Bob 而输出#3 包含 Bob/David。就像明智的输出 #1 vs 输出 #4 Alice/Carol vs Alice/David。
-
@Belayer 好建议。我修改了(并简化了,希望如此!)我的问题。
标签: postgresql