我有四个表(fabrics、reservations和fabricmembers、nodes)。
每个“节点”可能有零个以上的“fabricmembers”(与之关联)。
每个“fabric”可能有零个或多个“fabricmembers”(与之关联)。
一个节点可能有一个“保留”,它与一个单独的“节点”相关联。
因此,您可以在以下情况下看到这些内容之间的引用:

fabricmember.ipaddr = reservation.ipaddr


fabricmember.fabric=结构.fabricname
(您可以在不实际引用“节点”的情况下完成所有这些操作)。
我想运行一个查询,可以显示每个FABRIC有多少(sum)预订与之关联,以及它有多少(sum)fabricm成员。同样,在一个查询中
我一直在使用以下查询:
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);

但是,如果fabric没有成员,或者它有成员,但是这些成员没有保留,那么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

关于mysql - 来自其他两个表的表中相关字段的MySQL计数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9153713/

10-10 14:40