在 MySQL 中,如何将 BETWEEN 与 'AS' 列一起使用
Posted
技术标签:
【中文标题】在 MySQL 中,如何将 BETWEEN 与 \'AS\' 列一起使用【英文标题】:In MySQL how do you use BETWEEN with 'AS' columns在 MySQL 中,如何将 BETWEEN 与 'AS' 列一起使用 【发布时间】:2012-02-08 16:28:24 【问题描述】:第 1 部分。如何在两个不同的“AS”列上搜索值
第 2 部分。如何列出最接近 98 的前 5 个值?
查询示例:
select
TITLE.name,
(TITLE.value-TITLE.msp) AS Lower,
(TITLE.value+TITLE.msp) AS Upper
FROM TITLE
WHERE 98 BETWEEN Lower AND Upper;
【问题讨论】:
【参考方案1】:对于第 1 部分),您需要使用嵌套选择,因为您不能在同一子选择中使用重命名的投影(SELECT
部分)作为谓词(WHERE
部分)。
对于第 2 部分),使用ORDER BY .. LIMIT
获得前 5 名。按与98
的最小绝对差排序
SELECT t.* FROM (
SELECT
TITLE.name,
(TITLE.value-TITLE.msp) AS Lower,
(TITLE.value+TITLE.msp) AS Upper,
(TITLE.value) AS Value
FROM TITLE
) t
WHERE 98 BETWEEN t.Lower AND t.Upper
ORDER BY ABS(98 - t.Value) ASC
LIMIT 5
【讨论】:
ERROR 1248 (42000):每个派生表都必须有自己的别名。这是我用这个确切的例子得到的错误 @Jammin:哎呀,我忘了那个特殊的 mysql 限制。查看更新 感谢您的回复。但是 t.* 指的是什么? @Jammin:t.*
引用嵌套选择/派生表中的所有字段。 IE。 name
、Lower
、Upper
、Value
。将t.*
替换为*
或t.name, t.Lower, t.Upper
,如果您愿意的话以上是关于在 MySQL 中,如何将 BETWEEN 与 'AS' 列一起使用的主要内容,如果未能解决你的问题,请参考以下文章
MySQL的WHERE语句中BETWEEN与IN的用法和他们的区别
MySQL的WHERE语句中BETWEEN与IN的用法和他们的区别