2016-03-24 40 views
0

我有一个Postgres 9.3数据库与用户和分支表。UNION ALL是获取这些数据的正确方法吗?

用户表列

+----+-------+ 
| |  | 
+----+-------+ 
| 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 | 
+----------------+----------------+--------+ 

在那里我基本上每个替代与*_user_id一个referrer_emailreferred_email,然后在相应的套结amount。我能做些什么不同?我以为UNION ALL加在一起的所有列。

+1

'联盟(全部)'其序列的'SELECT'子句中的列相匹配。它放弃了你在第二个'SELECT'中给列的名字。 – trincot

回答

1

我猜你正在寻找的东西是这样的:

select u1.referred_email as email1, u2.referrer_email as email2, a.amount 
from affiliates as a, users as u1, users as u2 
where a.referred_user_id = u1.id 
and a.referrer_user_id = u2.id 
2

我想UNION ALL加入所有列在一起。

不,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 
相关问题