mysql - 为 WHERE 上的子查询取别名

标签 mysql

我有这个示例查询,假设 MAX(id) = 100

SELECT id
FROM users
WHERE id < (SELECT MAX(id) FROM users) AND id > (SELECT MAX(id) FROM users)-50

我从这个查询中得到 ids50 到 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/

相关文章:

mysql - 错误 1452 : Cannot add or update a child row: a foreign key constraint fails

mysql - 如何查看从 dbeaver 内部执行的查询

c# - 从 C# 中的多个表中选择

php - codeigniter php 中的 CONCAT 和 UPDATE

php - 显示来自 MySQL 的信息 - 来自 2 个不同的表...啊!菜鸟有麻烦了

mysql - SELECT SQL 查询 (MySQL) 中的计算列

sql - 尝试连接表并按一个不同的最大值进行选择

php - PDO 准备和执行查询总是返回错误

Mysql Concat正在显示字节数组

mysql - SQL:如何显示列中总计的百分比?