我见过一个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
我们可以优化以上查询吗?请告诉我如何优化上述查询。
请帮帮我... 感谢。
答案 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相同,因为是同一个字段。