使用“tblA”优化查询和使用表“tblA”内连接

时间:2012-09-17 17:04:57

标签: 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

我们可以优化以上查询吗?请告诉我如何优化上述查询。

请帮帮我... 感谢。

2 个答案:

答案 0 :(得分:2)

有很多很好的理由可以让你把桌子连接回来......但我在这里看不到它。通常,您需要至少两个连接条件,一个查找某种类型的不等式的连接条件,或一个可以匹配表中零个或多个记录的连接条件(以增加或限制结果数)。

我在这里看不到类似的东西。在这种情况下,看起来您可以只删除连接,并更新对A2的所有引用以使用A1。这是完整的查询吗?

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

答案 1 :(得分:0)

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

此行表示您将tblA作为A1加入,tblA作为A2加入,并且当来自tblA的AcctServiceID作为A1与作为A2的tblA的AcctServiceID相同时显示行。 优化此查询的方法是删除此行,因为不执行任何操作。 AcctServiceID与AcctSerivceID相同,因为是同一个字段。