gpt4 book ai didi

mysql - 从各个表中选择所有值不为空的公共(public)元素

转载 作者:行者123 更新时间:2023-11-29 19:00:48 25 4
gpt4 key购买 nike

我有 3 个表,A、B 和 C。每个表都有一个公共(public)列、ID 以及其他数据。我想要每个表中的所有 ID,并且所有数据都不为空。最有效的方法是什么?在我的真实案例中,我有超过 5 个表。

例如:

Table A
| ID | A_1 | A_2 | A_3 | A_4 | A_5 | A_6 |

Table B
| ID | B_1 | B_2 | B_3 | B_4 |

Table C
| ID | C_1 | C_2 | C_3 | C_4 | C_5 | C_6 | C_7 | C_8 |

此查询将获取三个表中所有共同的 ID。

SELECT  distinct ID FROM A
where
exists(select 1 from B where A.ID = B.ID )
AND exists(select 1 from C where A.ID = C.ID );

此查询将选择所有列都不为空的 ID:

SELECT ID 
FROM A
WHERE A_1 IS NOT NULL AND A_2 IS NOT NULL AND A_3 IS NOT NULL AND A_4 IS NOT NULL AND A_5 IS NOT NULL;

(我希望对此有更好的查询。)

我应该对所有表进行相同的查询。然后将所有内容连接在一起。

有更好的解决方案吗?

最佳答案

这应该有效:

SELECT DISTINCT A.ID
FROM A
INNER JOIN B ON A.ID = B.ID AND B.value IS NOT NULL
INNER JOIN C ON A.ID = C.ID AND C.value IS NOT NULL
INNER JOIN D ON A.ID = D.ID AND D.value IS NOT NULL
INNER JOIN E ON A.ID = E.ID AND E.value IS NOT NULL
WHERE A.value IS NOT NULL
;

它的缺点是,如果存在一个或多个一对多关系,中间结果可能会爆炸。更好的解决方案可能与您的第一个示例更相似;但不是使用相关的 EXISTS 子查询......

SELECT DISTINCT ID 
FROM A
WHERE A.Value IS NOT NULL
AND A.ID IN (SELECT DISTINCT ID FROM B WHERE Value IS NOT NULL)
AND A.ID IN (SELECT DISTINCT ID FROM C WHERE Value IS NOT NULL)
AND A.ID IN (SELECT DISTINCT ID FROM D WHERE Value IS NOT NULL)
AND A.ID IN (SELECT DISTINCT ID FROM E WHERE Value IS NOT NULL)
...etc

这样做的缺点是您不会从 ID 索引中获得任何好处。如果我提到的“爆炸”问题不是一个问题,并且 ID 在所有或大部分表上建立了索引,那么我的第一个建议可能会更快、更高效。

编辑:哦,我忽略了您的意思是每个表中的多个值 NOT NULL,但应该应用相同的概念,您只需将所有 Value IS NOT NULL 条件替换为 AND在适当的列上编辑 IS NOT NULL 条件。

关于mysql - 从各个表中选择所有值不为空的公共(public)元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43898559/

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