我有四个表(结构,预留和结构成员,节点)。
每个"节点"可能有更多的" fabricmembers" (与之相关)。 每个"面料"可能有零个或多个" fabricmembers" (与之相关)。 一个节点可能有一个"预留"在它上面,将它与一个"节点"。
相关联因此,您可以在以下情况下看到这些内容之间的引用:
fabricmember.ipaddr = reservation.ipaddr
和
fabricmember.fabric = fabric.fabricname
(你可以在不实际引用"节点"的情况下完成所有这些。)
我想运行一个查询,可以显示每个FABRIC,与它相关联的多少(总和)预留,以及它有多少(总和)结构成员。同样,在单个查询
中我一直在使用以下查询:
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);
这个几乎有效,但是如果一个结构有零成员,或者它有成员但这些成员有ZERO保留,则结构根本不显示在查询。
以下作品向我展示了一个结构有多少成员,即使该数字为零:
select fabricname,count(fabricmembers.ipaddr)
from fabrics
LEFT JOIN (fabricmembers)
ON (fabrics.fabricname = fabricmembers.fabric)
GROUP BY (fabrics.fabricname);
但是,我无法弄清楚如何让查询告诉我成员的数量。
这有什么意义吗? 任何帮助将不胜感激!
答案 0 :(得分:1)
您的查询不返回零预留/零成员的结构,因为您尝试从只有具有预留/成员的结构的表中构建它!您可以找到空织物的唯一地方是织物桌 - 因此您应该从下面构建它:
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
答案 1 :(得分:0)
您需要使用相关的子查询,例如:
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