簡體   English   中英

sql復雜連接

[英]sql complex join

我有三個相關的表,我想使用聯接從中檢索數據:包含用戶帳戶詳細信息的 tbl_accounts、包含用戶個人詳細信息的 tbl_users 和包含所有用戶交易詳細信息的 tbl_t_records。

tbl_accounts 中,我有一個外鍵列持有者,可以幫助將其鏈接到tbl_users ,在tbl_t_records 中,我有外鍵列oaccountdaccount,每個列都鏈接到tbl_accounts,oaccount存儲了在daccount期間發起交易的帳戶的詳細信息存儲交易目的地帳戶的詳細信息

這是 tbl_accounts 表的片段tbl_accounts 屏幕截圖

這是 tbl_users 的一個在此處輸入圖片說明

這是 tbl_t_records 的一個在此處輸入圖片說明

我想創建一個查詢,該查詢使用連接返回發送者、接收者和交易 ID 的名稱。 到目前為止,這是我嘗試過的

    SELECT tbl_t_records.id transaction_id,
            CONCAT(tbl_users.lname,tbl_users.othername)as sender, 
            amount,
            CONCAT(tbl_users.lname,tbl_users.othername)as receiver 
    FROM tbl_t_records
        INNER JOIN tbl_accounts on oaccount = tbl_accounts.id 
        INNER JOIN tbl_users ON tbl_accounts.holder = tbl_users.id 

這不會給我目標帳戶的詳細信息,而只是顯示發件人的數據,它與收件人的數據相同,如此處所示在此處輸入圖片說明 我究竟做錯了什么?

您只需要多個join s - 每個名稱的單獨集合:

SELECT r.*,
       CONCAT(uo.lname, uo.othername) as sender,
       CONCAT(ud.lname, ud.othername) as receiver
FROM tbl_t_records r JOIN
     tbl_accounts ao
     ON r.oaccount = ao.id JOIN
     tbl_users uo
     ON ao.holder = uo.id JOIN
     tbl_accounts ad
     ON r.daccount = ad.id JOIN
     tbl_users ud
     ON ad.holder = ud.id;

您可以多次加入,如下所示:

select 
    r.id transaction_id,
    concat(u1.lname, u1.othername) sender, 
    concat(u2.lname, u2.othername) receiver, 
    r.amount
from tbl_t_records r
inner join tbl_accounts a1 on a1.id = r.oaccount
inner join tbl_users u1 on u1.id = a1.holder
inner join tbl_accounts a2 on a2.id = r.daccount
inner join tbl_users u2 on u2.id = a2.holder

此查詢從事務表開始,然后通過tbl_accounts (別名a1 )到tbl_users (別名u1 )遵循與oaccount相關的關系。 另一系列連接從daccount開始,並帶來相關的用戶數據(別名a2/u2 )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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