gpt4 book ai didi

mysql - 计算引用特定行的行数,MySql 中的多个引用表?

转载 作者:行者123 更新时间:2023-11-29 17:43:18 25 4
gpt4 key购买 nike

我的问题如下:

正如问题"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 |
+----+------+

解决方案的重要限制

  1. 该解决方案应适用于 n 个表,以获得合理的 n 值。该示例有 n=2
  2. 解决方案不应涉及所有表的乘积集的子集。由于 A 中的某些行可能在所有其他表中被多次引用,因此产品集的大小很可能会大得愚蠢(例如 10*10*10*... 很快就会变大)。例如。它可能不是 O(q^n),其中 n 是表的数量,q 是出现的次数。

最佳答案

这是一个部分解决方案,我相信它仍然存在与条件 [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

不幸的是,如果您经常引用行,则查询将产生大量中间结果,耗尽内存,从而永远无法完成。

关于mysql - 计算引用特定行的行数,MySql 中的多个引用表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49922217/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com