在 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。 nameLowerUpperValue。将t.* 替换为*t.name, t.Lower, t.Upper,如果您愿意的话

以上是关于在 MySQL 中,如何将 BETWEEN 与 'AS' 列一起使用的主要内容,如果未能解决你的问题,请参考以下文章

MySQL的WHERE语句中BETWEEN与IN的用法和他们的区别

MySQL的WHERE语句中BETWEEN与IN的使用教程

MySQL的WHERE语句中BETWEEN与IN的用法和他们的区别

<mysql问题>如何同时使用between和like吗?

使用 BETWEEN 与 JOIN php/mysql 时不显示结果

MySQL 用 BETWEEN AND 日期查询包含范围边界