簡體   English   中英

PostgreSQL 多連接

[英]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.namet1.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)

您也可以將其表述為joingroup 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM