我见过一个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我们可以优化上面的查询吗?请建议我如何优化上面的查询。
请帮帮我。谢谢。
发布于 2012-09-18 01:10:02
inner JOIN tblA A2 ON A1.AcctServiceID = A2.AcctServiceID这一行意味着您以A1的身份加入tblA,以A2的身份加入tblA,当来自tblA的AcctServiceID as A1与来自tblA的AcctServiceID as A2相同时,显示该行。优化此查询的方法是删除此行,因为什么也不做。AcctServiceID和AcctSerivceID总是一样的,因为它是同一个字段。
发布于 2012-09-18 01:12:42
有很多很好的理由让你想要把一个表连接回它本身……但我在这里看不到。通常,您至少需要两个联接条件,一个查找某种类型的不等式的联接条件,或者一个可以与表中的零个或多个记录匹配的联接条件(以增加或限制结果的数量)。
我在这里看不到这样的东西。在本例中,看起来您只需删除连接,并将所有对A2的引用更新为使用A1即可。这是完整的查询吗?
我能想到的最接近的事情是,他们这样做是为了过滤掉AcctServiceID字段中有NULL的记录(因为NULL不等于它本身),但这将是一种奇怪的尝试方式,如果它真的有效的话。
https://stackoverflow.com/questions/12464008
复制相似问题