gpt4 book ai didi

sql - 如果多个条件之一为真,我如何执行 JOIN?

转载 作者:行者123 更新时间:2023-12-04 21:18:12 28 4
gpt4 key购买 nike

我的最终目标...SELECT 来自 qry1 的所有字段,位于家庭电话、手机或工作电话匹配 tbl2 的行上>

这是我当前“失败”的 SQL 语法。失败是指它在 10 到 15 分钟后尚未完成执行,而个人加入每个(独立)运行一两分钟。

选择 qry1.*
FROM qry1 内部联接 tbl2
开((qry1.CellPhone = tbl2.CellPhone)
或 (qry1.HomePhone = tbl2.HomePhone)
或 (qry1.WorkPhone = tbl2.WorkPhone));

问题:我的 SQL 语法有错误吗?有没有更好的方法来完成我的任务?对我来说,简单地独立运行 3 个(家庭、工作、单元)JOIN 查询,将它们联合起来,然后在必要时进行重复数据删除是否更有意义?

最佳答案

如果单个连接工作得很快,那么复合 OR 条件可能会很慢,因为它不能使用单个索引,而单个条件可以对三个连接条件使用单个索引。因为它不能使用一个索引,它很可能是在进行非索引顺序表扫描。 (您应该研究查询计划,以便了解优化器实际在做什么。)

鉴于各个查询的运行速度相当快,因此,您应该使用 UNION 获得更好的性能(除非您的 DBMS 中的优化器存在盲点):

SELECT qry1.* FROM qry1 INNER JOIN tbl2 ON qry1.CellPhone = tbl2.CellPhone
UNION
SELECT qry1.* FROM qry1 INNER JOIN tbl2 ON qry1.HomePhone = tbl2.HomePhone
UNION
SELECT qry1.* FROM qry1 INNER JOIN tbl2 ON qry1.WorkPhone = tbl2.WorkPhone

这应该与 3 个单独的查询一样快地为您提供结果。它不会那么快,因为 UNION 确实进行了重复消除(当然,单个查询不会)。您可以使用 UNION ALL,但如果两个表中有很多行,其中 2 或 3 对字段匹配,则可能会导致结果中出现大量重复。

关于sql - 如果多个条件之一为真,我如何执行 JOIN?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27696625/

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