当你执行的是连接操作时,实际上是将两个表。例如,你在这里写的子查询是作为一个单独的表格工作的。因此,您必须为此表使用别名。这就是你的错误信息背后的原因。
您的疑问:
SELECT u.thumbnail, u.id FROM users AS u
INNER JOIN
(
SELECT c.id, c.user_id FROM contestants AS c
WHERE u.id = c.users_id
AND c.id = (select max(c.id))
) WHERE u.thumbnail IS NOT NULL
它应该包含一个别名为子查询:
SELECT c.id, c.user_id FROM contestants AS c
WHERE u.id = c.users_id
AND c.id = (select max(c.id))
比方说,这是T.
所以,你的查询现在变成:
SELECT u.thumbnail, u.id FROM users AS u
INNER JOIN
(
SELECT c.id, c.user_id FROM contestants AS c
WHERE u.id = c.users_id
AND c.id = (select max(c.id))
) AS T
WHERE u.thumbnail IS NOT NULL
但是什么你想实现的,其实也可以在一个更合适的方法来实现:
SELECT u.thumbnail, u.id, max(c.id),
FROM users as u
LEFT JOIN contestants as c
on u.id = c.user_id
WHERE u.thumbnail IS NOT NULL
为什么要小题大做,当您在您的处置一个更好,更简洁的方法吗?
确切! ***“#1248 - 每个派生表都必须有自己的别名”***“。给第二个表(内部连接一个)提供一个别名,就像你先做的一样! –