1

有人可以逐步解释如何处理此查询吗?

SELECT F.ID,
       F.FirstName,
       h.UserID,
       h.TYPE,
       L.UserID,
       L.LOGGEDIN
FROM   users AS F
       INNER JOIN history AS h
         ON h.USERID = F.ID
       LEFT JOIN Login AS L
         ON L.USERID = f.MONEY 

如果我删除L.UserID, L.LOGGEDIN and LEFT JOIN它会给我这个结果:

SELECT F.ID,
       F.FirstName,
       h.UserID,
       h.TYPE
FROM   users AS F
       INNER JOIN history AS h
         ON h.USERID = F.ID 

ID  FirstName   UserID  TYPE
6   rafal            6  A
6   rafal            6  A
6   rafal            6  A
5   rafal            5  B

这是否意味着结果在第一步中由 INNER Join 返回,并且进一步向左加入?

4

2 回答 2

1

是的。您还可以FROM将查询的一部分编写为:

FROM   ( users AS F
         INNER JOIN history AS h
           ON h.USERID = F.ID
       )
       LEFT JOIN Login AS L
         ON L.USERID = f.MONEY 

如果这对你有帮助。这就是FROM零件的解析方式。

现在订单或处理首先是FROM子句,然后是SELECT. 对于更复杂的查询,它是:

FROM -> WHERE  -> GROUP BY -> HAVING -> SELECT -> DISTINCT -> 
-> UNION -> ORDER BY -> OFFSET -> LIMIT 

请注意,这并不意味着 DBMS 将按此顺序处理查询。它可以选择走不同的道路。不管它如何处理它,结果集应该与以这种方式处理的结果集相同。

于 2012-06-18T22:08:45.730 回答
0

很可能,是的,运行EXPLAIN后跟您的查询,它会告诉您。

于 2012-06-18T21:32:11.663 回答