簡體   English   中英

來自其他兩個表的表中相關字段的MySQL計數

[英]MySQL Count of related fields in a table from two other tables

我有四個表(結構,保留和結構成員,節點)。

每個“節點”可能有零個(與之關聯的)更多“成員”。 每個“結構”可以具有零個或多個“結構成員”(與其關聯)。 一個節點上可能有一個“保留”,並與一個“節點”相關聯。

因此,您可以在以下情況下看到這些事物之間的引用:

fabricmember.ipaddr = reservation.ipaddr

fabricmember.fabric = fabric.fabricname

(您可以執行所有這些操作而無需實際引用“節點”)。

我想運行一個查詢,該查詢可以向我顯示每個FABRIC,與之關聯的預訂總數(總數)以及其擁有的fabricmember總數(總數)。 同樣,在單個查詢中

我一直在使用以下查詢:

select 
   fabricmembers.fabric,
   count(reservations.ipaddr) as Memebers,
   count(nodes.ipaddr) as Reservations 
from fabricmembers  
LEFT JOIN (reservations,nodes) 
ON ((reservations.ipaddr = fabricmembers.ipaddr) and (nodes.ipaddr = fabricmembers.ipaddr))   
GROUP BY (fabricmembers.fabric);

幾乎可以正常工作,但是,如果結構的成員為零 ,或者結構的成員為零但這些成員具有零保留,則該結構不會顯示在查詢中。

以下工作向我展示了結構具有多少個成員,即使該數目為零也是如此:

select fabricname,count(fabricmembers.ipaddr) 
from fabrics 
LEFT JOIN (fabricmembers)
 ON (fabrics.fabricname = fabricmembers.fabric) 
GROUP BY (fabrics.fabricname);

但是,我不知道如何讓查詢也告訴我成員數。

這有道理嗎? 任何幫助,將不勝感激!

您的查詢不會返回保留為零/成員為零的結構,因為您正試圖從僅存在保留/成員的結構的表中進行構建! 可以找到空織物的唯一地方是織物表-因此,您應該從下往下構建它:

SELECT fabrics.fabricname, count(reservations.ipaddr), count(fabricmember.ipaddr)
FROM fabrics
LEFT JOIN fabricmembers ON fabrics.fabricname = fabricmembers.fabric
LEFT JOIN reservations ON fabricmembers.ipaddr = reservations.ipaddr
GROUP by fabric.fabricname

您需要使用相關子查詢,例如:

SELECT fabricmembers.fabric f, 
       (SELECT count(*) FROM reservations r where r.ipaddr = f.ipaddr) Members, 
       (SELECT count(*) FROM nodes n where n.ipaddr = f.ipaddr) Reservations
FROM fabricmembers

暫無
暫無

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

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