[英]PostgreSQL multiple join
我想在一個查詢中進行多個連接,我有四個表,結構如下:
表1字段,t1: did(int)、finished(datetime)、userid(int)
表2字段,t2: userid(int),name
表3字段,t3: blid(int)、did(int)、count(int)、btid(int)
表4字段,t4: btid(int), denom (int)
我想打一個查詢在那里我會得到的所有領域t1
除了一個與加盟t2
在這種情況下,我想顯示t2.name
時t1.userid = t2.userid
這是公平的簡單:
select t1.did, t1.finished, t2.name, t2.userid from t1 inner join on t1.userid=t2.userid
但我還想添加一個由以下查詢組成的列:
select sum(t3.count*t4.denom) from t3 inner join t4 on t3.btid=t4.btid
只有當t3.did=t1.did
我不知道它是外連接還是其他時,但我想將前一個查詢添加為第一個查詢中的一列,它會是這樣的:
t1.did、t1.finished、t2.name、t2.userid、“總計”?
現實世界的問題是用戶存款t1
用戶信息保存在t2
。 存款金額在t3
描述為每個存款t1.did
和每個存款細分的相關面額,在t3
中描述在t4
。
您可能會發現這是最簡單的相關子查詢:
select t1.did, t1.finished, t2.name, t2.userid,
(select sum(t3.count * t4.denom)
from t3 inner join
t4
on t3.btid = t4.btid
where t3.did = t1.did
) as value
from t1 inner join t2
on t1.userid = t2.userid;
對於此版本,您需要t3(did, btid, count)
和t4(btid, denom)
。
您也可以將其表述為join
和group by
:
select t1.did, t1.finished, t2.name, t2.userid,
sum(t3.count * t4.denom)
from t1 inner join t2
on t1.userid = t2.userid left join
t3
on t3.did = t1.did left join
t4
on t3.btid = t4.btid
group by t1.did, t1.finished, t2.name, t2.userid;
您可以使用group by
子句:
select t1.did, t1.finished, t2.name, t2.userid, sum(t3.count*t4.denom)
from t1
inner join t2 on t1.userid=t2.userid
inner join t3 on t1.did = t3.did
inner join t4 on t3.btid = t4.btid
group by t1.did, t1.finished, t2.name, t2.userid
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.