我的问题如下:
正如问题"How to count amount of rows referring to a particular row foreign key in MySql?"中所提到的,我想计算涉及多个表的表引用,这些表引用了我感兴趣的表。但是,我们希望资源表中每行的特定引用数。
另外,表格相互引用的变量怎么样,但是外键不存在?
让我们设置一些最小的例子; 我们有三个表,这里称为A,B和C. B和C引用A中的行。我想计算A中每行的引用总量。
第一个表格(A)的内容,以及预期查询结果列在' Count':;
+----+------------+-------+
| ID | Name | Count |
+----+------------+-------+
| 1 | First row | 0 |
| 2 | Second row | 5 |
| 3 | Third row | 2 |
| 4 | Fourth row | 1 |
+----+------------+-------+
第二张表(B)的内容:
+----+------+
| ID | A_ID |
+----+------+
| 1 | 2 |
| 2 | 2 |
| 3 | 2 |
+----+------+
第三表(C)的内容:
+----+------+
| ID | A_ID |
+----+------+
| 1 | 2 |
| 2 | 2 |
| 3 | 3 |
| 4 | 3 |
| 5 | 4 |
+----+------+
解决方案的重要限制
n
的合理值,解决方案应与n
表一起使用。该示例包含n=2
。 O(q^n)
,其中n
是表的数量,q
是出现的数量。 答案 0 :(得分:0)
这是一个部分解决方案,我认为仍然会遇到与条件相关的性能问题[2]
我添加此作为答案,因为它可能对那些致力于更好解决方案的人有用
应用以下查询。根据需要扩展其他表,为JOIN的总和添加额外的行。只要您的表少于约90个,此特定解决方案就可以使用。除此之外,您还必须运行多个类似的查询并缓存结果(例如,通过在' A'表中创建一个列),然后对所有这些进行求和。
SELECT
COUNT(DISTINCT B.ID) +
COUNT(DISTINCT C.ID) -- + .....
AS `Count`
FROM A
LEFT JOIN B ON A.ID = B.A_ID
LEFT JOIN C ON A.ID = C.A_ID
不幸的是,如果你经常引用行,那么查询将产生一个巨大的中间结果,内存不足,因此永远不会完成。