以下查询工作正常。我正在使用外部选择中的值对内部选择进行过滤。
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。
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)