sql-server - 优化表 "tblA"内连接与 "tblA"的查询和使用

标签 sql-server

我见过一个 sql 查询,类似于,

SELECT B.SubscriptionID
FROM 
 tblA A1
inner JOIN  tblA A2 ON A1.AcctServiceID = A2.AcctServiceID  
INNER JOIN  tblB B ON A2.ServiceID = B.ServiceID
INNER JOIN  tblC C ON B.SubscriptionID = C.SubscriptionID 
WHERE
    A1.ServiceID = 1302
AND (C.Type LIKE '%O%' OR C.Type LIKE '%A%')

谁能解释一下有什么用

 tblA A1
    inner JOIN  tblA A2 ON A1.AcctServiceID = A2.AcctServiceID

我们可以优化上面的查询吗?请建议我如何优化上述查询。

请帮帮我... 谢谢。

最佳答案

您可能有很多充分的理由想要将表连接回其自身......但我在这里没有看到它。通常,您至少需要两个联接条件,一个查找某种类型的不等式的联接条件,或者一个可以匹配表中零个或多个记录的联接条件(以增加或限制结果数量)。

我在这里没有看到类似的东西。在这种情况下,您似乎只需删除联接,然后更新对 A2 的所有引用以使用 A1 即可。这是完整的查询吗?

我在这里能想到的最接近的事情是,他们这样做是为了过滤掉 AcctServiceID 字段中带有 NULL 的记录(因为 NULL 不等于其自身),但这将是一种奇怪的尝试方法,如果它甚至有效。

关于sql-server - 优化表 "tblA"内连接与 "tblA"的查询和使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12464008/

相关文章:

c# - SqlDependency 仅在订阅时触发

c# - 使用 ClickOnce 安装我的应用程序 - 缺少 dll 消息(尽管未请求)

sql - SQL Server 标识函数是否可重现

sql - 创建表 : "There is already an object named ' table' in the database", 时出错,但我对该名称没有任何限制

mysql - 将 MySQL 脚本移植到 MS SQL -> 同时进行数据分配和检索

c# - 如何在C#中同时检索存储过程的结果值和select语句?

sql-server - 使用sql查询将日期时间值从一个时区转换为UTC时区

sql - 如何将日期与当前时间一起保存到数据库中?

mysql - 将 XML 读入 SQL 表

c# - 使用已经打开的数据库连接