gpt4 book ai didi

mysql - SQL 与 MAX() 连接。

转载 作者:行者123 更新时间:2023-11-29 01:29:09 25 4
gpt4 key购买 nike

我有两个表,users 和 contestants。我正在尝试选择具有个人资料图片(在用户表上)的最大参赛者 ID

这是我糟糕的 SQL:

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

当前的错误是:#1248 - 每个派生表都必须有自己的别名。

这让我感到困惑,因为用户的别名是 u,参赛者的别名是 c..

我在这里做错了什么?我猜很多所以一些帮助将不胜感激!

最佳答案

无论何时执行连接操作,实际上都是在连接两个表。例如,您在此处编写的子查询作为一个单独的表工作。因此,您必须为此表使用别名。这就是您的错误消息背后的原因。

您的查询:

    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

当您有更好、更简洁的方法可供使用时,为什么还要大惊小怪呢?

关于mysql - SQL 与 MAX() 连接。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22801729/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com