2

我见过一个 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

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

请帮助我...谢谢。

4

2 回答 2

2

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

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

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

于 2012-09-17T17:12:41.610 回答
0
 inner JOIN  tblA A2 ON A1.AcctServiceID = A2.AcctServiceID

此行表示您将 tblA 作为 A1 与 tblA 作为 A2 连接,并且当来自 tblA as A1 的 AcctServiceID 与来自 tblA 作为 A2 的 AcctServiceID 相同时显示行。优化此查询的方法是删除此行,因为不要这样做任何事物。AcctServiceID 与 AcctSerivceID 相同,因为是相同的字段。

于 2012-09-17T17:10:02.033 回答