我有这个示例查询,假设 MAX(id) = 100
SELECT id
FROM users
WHERE id < (SELECT MAX(id) FROM users) AND id > (SELECT MAX(id) FROM users)-50
我从这个查询中得到 ids
在 50 到 100
范围内并且它按预期工作
但我希望它更短,所以我尝试使用这样的别名
SELECT id
FROM users
WHERE id < (SELECT MAX(id) FROM users) AS maxid AND id > maxid-50
但是它不起作用然后我尝试像这样定义变量
SELECT id
FROM users
WHERE id < @x = (SELECT MAX(id) FROM users) AND id > @x-50
但是注意到了
Impossible WHERE noticed after reading const tables
如何做一次MAX(id)计算来节省性能?
最佳答案
您可以在查询之前定义变量:
set @maxid = (select max(id) from users);
SELECT id
FROM users
WHERE id > @maxid - 50 and id < @maxid;
参见 demo .
关于mysql - 为 WHERE 上的子查询取别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57078639/