sql - UNION ALL 是获取此数据的正确方法吗?

标签 sql postgresql

我有一个带有用户表和附属表的 Postgres 9.3 数据库。

用户表列

+----+-------+
|    |       |
+----+-------+
| id | email |
+----+-------+

附属栏目

+----+------------------+------------------+--------+
| id | referred_user_id | referrer_user_id | amount |
+----+------------------+------------------+--------+

我尝试了以下查询:

select
  users.email as referred_email,
  affiliates.amount
from affiliates
  JOIN users ON affiliates.referred_user_id = users.id

UNION ALL

select
  users.email as referrer_email,
  users.id
from affiliates
  JOIN users ON affiliates.referrer_user_id = users.id

它生成包含列的表格:

+----------------+--------+
| referred_email | amount |
+----------------+--------+

但我想要一对一的表格,例如:

+----------------+----------------+--------+
| referrer_email | referred_email | amount |
+----------------+----------------+--------+

我实际上是用 referrer_emailreferred_email 替换每个 *_user_id,然后加上相应的 amount。我能做些什么不同的事情?我认为 UNION ALL 将所有列连接在一起。

最佳答案

I thought UNION ALL joined all the columns together.

不,UNION ALL 连接行。如果您想加入列,您需要使用JOIN

可能看起来像这样:

select
  rer.email as referrer_email,
  red.email as referred_email,
  affiliates.amount
from affiliates
  JOIN users rer ON affiliates.referrer_user_id = rer.id
  JOIN users red ON affiliates.referred_user_id = red.id

关于sql - UNION ALL 是获取此数据的正确方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36210148/

相关文章:

mysql - 数据库中 bool 值的约定

php - Doctrine2 - 从没有直接关系的多个表中选择

mysql - 是否可以查看查询更改了哪些数据?

sql - 修剪时间超出范围

node.js - 使用 "node postgres"的 Nodejs 应用程序在 GKE 中每 60 分钟出现一次 "Connection terminated unexpectedly"

sql - Postgresql - 计算 ILIKE 查询结果中子字符串实例的数量

c# - 如何获取 Access (Jet) 数据库中的表列表?

sql 从有序表中选择

sql - 在 postgres 中插入带有序列号的脚本

sql - 在 PostgreSQL 中查询 iLike 列表