繁体   English   中英

在同一查询中将MySQL SELECT查询的结果用作WHERE条件

[英]Use the result of the MySQL SELECT query as a WHERE condition in the same query

我正在尝试执行以下查询:

SELECT MAX(`peg_num`)
  AS "indicator"
FROM `list`
WHERE `list_id` = 1
  AND "indicator" >= 1

但是我得到了NULL的结果。 我应该得到的是99 ,因为peg_num的范围是00到99。

根据“指标”检查的值实际上应该是用户输入,因此我希望它具有通用性。 但是,如果我翻转等式,它的确会给我正确的结果:

SELECT MAX(`peg_num`)
  AS "indicator"
FROM `list`
WHERE `list_id` = 1
  AND "indicator" <= 1

为什么要这样做?

编辑:

正如建议的那样,我正在使用HAVING子句...但无论如何我现在都放弃了别名:

SELECT MAX(`peg_num`) AS "indicator"
FROM `list`
GROUP BY `list_id`
HAVING MAX(`peg_num`) <= 40

还是很固执。 现在,无论having子句中的值如何,无论不等式如何,它都会给我99。

EDIT2:

作为澄清:

我想发生的是查询选择peg_num范围内的最大值,但前提是该值大于用户提供的输入。 因此,在这种情况下,最大值为99。如果用户想要选择一个数字,例如101,则他/她不能,因为它不在范围内。

您可能想查看关于另一个不允许在where子句中使用别名的Stack问题的答案的链接:

可以在mysql的WHERE子句中使用别名吗?

保罗·迪克森(Paul Dixon)引用:

不允许在WHERE子句中引用列别名,因为执行WHERE子句时可能尚未确定列值。 请参见第B.1.5.4节“ 列别名的问题 ”。

也:

标准SQL不允许在WHERE子句中引用列别名。

交换'<='和'> ='运算符时,您在查询中看到的行为是查询比较字符串/ varchar'indicator'与数字1的结果。

这就是为什么您看到正确答案的原因..when('indicator'> = 1)为true,而null(('indicator'<= 1)为false)。

  1. 由于双引号, WHERE子句中的"indicator"被解释为字符串。 因此,它的值为0,表示它始终小于1。必须在反引号中对列名进行转义。

  2. 请记住, WHERE子句在SELECT之前执行,因此SELECT定义的别名不能在WHERE子句中使用。

     SELECT MAX(`peg_num`) AS `indicator` FROM `list` WHERE `list_id` = 1 HAVING `indicator` >= 1 

在SELECT之前发生在哪里,并且不知道什么是“指示器”。

您应该使用HAVING(与GRO​​UP BY)来使用SELECT字段

这是语法文档

http://dev.mysql.com/doc/refman/5.5/en/select.html

像这样的想法

SELECT MAX(peg_num) AS indicator
FROM list
WHERE list_id = 1
HAVING indicator <= 1

我无法测试它,而且从未见过Mysql,所以只是这个主意,

我不知道,但是我很惊讶他们俩都工作。 WHERE在属于单个记录的字段上串行工作,我不希望它在“ indicator”上工作,因为那是一个分组计算。

这是您想要的吗?

SELECT max(`peg_num` ) AS "indicator"
FROM actions
WHERE `peg_num` >=1
AND `list_id` <= 1
  1. 您应该使用HAVING
  2. 在没有条件的情况下没有报价

这必须工作:

SELECT MAX(peg_num)
 AS indicator
FROM list
WHERE list_id = 1
  HAVING indicator >= 1

我完全重新发明了查询,它奏效了。 问题是,我不得不使用嵌套查询(并且我不想尽可能不这样做,我的教授一直不鼓励这样做)。

无论如何,这里是:

SELECT IF(`key` < 900, `key`, null) `key`
FROM (
(

    SELECT MAX(  `peg_num` ) AS  `key` 
    FROM  `list` 
    WHERE  `list_id` =1
    ) AS  `derivedTable`
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM