![](/img/trans.png)
[英]MySQL: How do I select two fields from table, and total of amount columns in two related tables?
[英]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.