一个表中来自其他两个表的相关字段的MySQL计数
我有四个表(结构、预订和fabricmembers、节点) 每个“节点”可能有零个或多个“fabricmembers”(与其关联)。 每个“结构”可能有零个或多个“fabricmembers”(与其关联)。 一个节点上可能有一个“保留”,它与一个“节点”相关联 因此,您可以在以下情况下看到这些事物之间的引用:一个表中来自其他两个表的相关字段的MySQL计数,mysql,sql,Mysql,Sql,我有四个表(结构、预订和fabricmembers、节点) 每个“节点”可能有零个或多个“fabricmembers”(与其关联)。 每个“结构”可能有零个或多个“fabricmembers”(与其关联)。 一个节点上可能有一个“保留”,它与一个“节点”相关联 因此,您可以在以下情况下看到这些事物之间的引用: fabricmember.ipaddr = reservation.ipaddr 及 fabricmember.fabric=fabric.fabricname (您可以在不实际引用“节
fabricmember.ipaddr = reservation.ipaddr
及
fabricmember.fabric=fabric.fabricname
(您可以在不实际引用“节点”的情况下执行所有这些操作)
我想运行一个查询,该查询可以显示每个结构的相关联的(sum)预订数量,以及它有多少(sum)fabricmembers。同样,在单个查询中
我一直在使用以下查询:
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 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
您需要为此使用相关子查询,例如:
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
您的查询不会返回具有零保留/零成员的结构,因为您试图从仅存在具有保留/成员的结构的表中构建它!唯一可以找到空结构的地方是结构表-因此,您应该从它向下构建它:
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 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
我完全理解你的意思。我知道,我只是不知道如何处理它。我确实找到了解决方法,但你的看起来更优雅。今晚晚些时候我会试试这个。谢谢我完全理解你的意思。我知道,我只是不知道如何处理它。我确实找到了解决方法,但你的看起来更优雅。今晚晚些时候我会试试这个。谢谢