嵌套子查询中的表别名未知

Jan*_*aus 5 mysql sql

以下查询工作正常。我正在使用外部选择中的值对内部选择进行过滤。

SELECT
    bk.ID,
    (SELECT COUNT(*) FROM guests WHERE BookingID = bk.ID) as count
FROM
    bookings bk;
Run Code Online (Sandbox Code Playgroud)

但是,以下选择将不起作用:

SELECT
    bk.ID,
    (SELECT SUM(count) FROM (SELECT COUNT(*) AS count FROM guests WHERE BookingID = bk.ID GROUP BY RoomID) sub) as sumcount
FROM
    bookings bk;
Run Code Online (Sandbox Code Playgroud)

错误消息是: Error Code: 1054. Unknown column 'bk.ID' in 'where clause'

为什么bk在子选择中知道我的别名,但在子选择的子选择中却不知道?

作为记录,我正在使用MySQL 5.6。

dno*_*eth 3

SELECT 列表中的相关标量子查询通常可以重写为派生表上的 LEFT JOIN(并且在许多情况下它们可能会表现得更好):

SELECT
    bk.ID,
    dt.sumcount
FROM
    bookings bk
LEFT JOIN 
 (SELECT BookingID,SUM(COUNT) AS sumcount
  FROM
   (
     SELECT BookingID, RoomId, COUNT(*) AS COUNT 
     FROM guests 
     GROUP BY BookingID, RoomID
    ) sub
  ) AS dt
ON bk.BookingID = dt.BookingID
Run Code Online (Sandbox Code Playgroud)