簡體   English   中英

MySQL查詢從5個表中選擇聯接

[英]MySQL query to select join from 5 tables

我有5張桌子:

tag: {tagID,tagDetails}
user: {userID,userDetails,u_status=[active or banned]}
subscribe: {tagID,userID}
item: {itemID, itemDetails,i_status=[active or banned]}
item_tag: {tagID,itemID}

我想選擇這些數據:

result: {tagID, tagDetails, num_subscribers, num_items}

對於每個標記ID,num_subscribers是表用戶下其u_status為“活動”並且其用戶ID和所述標記ID存在於表subscribe中的用戶數。

對於每個tagID,num_items是表項下其i_status為“活動”且其itemID和所述tagID存在於表item_tag中的用戶數

另外,我希望所有的tagID都出現在結果中。 如果沒有用戶訂閱或與該tagID相關聯的項目,則記錄為

{tagID,tagDetails,0,0}

產生此結果的最佳嵌套查詢(最好是“人類可讀”)是什么?

這是你所追求的嗎?

        SELECT T.tagID, T.tagDetails, count(distinct U.u_status), count(distinct I.i_status)
        FROM tag T
             JOIN subscribe S ON T.tagID = S.tagID
             JOIN user U ON S.userID = U.userID
             JOIN item_tag IT ON T.tagID = IT.tagID
             JOIN item I ON IT.itemID = I.itemID
        WHERE U.u_status = 'active' and I.i_status = 'active'
        GROUP BY T.tagID

        UNION

        (SELECT tagID, tagDetails, 0, 0
        FROM tag
        EXCEPT
        SELECT T.tagID, T.tagDetails, 0, 0
        FROM tag T
             JOIN subscribe S ON T.tagID = S.tagID
             JOIN user U ON S.userID = U.userID
             JOIN item_tag IT ON T.tagID = IT.tagID
             JOIN item I ON IT.itemID = I.itemID
        WHERE U.u_status = 'active' and I.i_status = 'active'
        GROUP BY T.tagID)

您可能不得不擺弄括號和別名。

暫無
暫無

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

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