Mysql查询问题未知列状态

时间:2012-03-22 16:50:42

标签: mysql sql database mysqli

我在这个查询中有一点问题我的Q是如何检查where子句

中的状态
SELECT `id`,`name`,`start_date`,`end_date`,
CASE
WHEN SYSDATE() <  `start_date` THEN 'WAITING'        
WHEN SYSDATE() >= `start_date` AND SYSDATE() <= `end_date` THEN 'START'
WHEN SYSDATE() >= `end_date`   THEN 'END'
END `status`
FROM teams WHERE `status` = 'START';

当我执行此查询时,它们会生成类似

的错误

enter image description here

参见数据库截图

enter image description here

非常感谢帮助

3 个答案:

答案 0 :(得分:4)

问题是您无法在同一查询中按名称引用计算列。所以你需要使用内部子查询:

SELECT `id`,`name`,`start_date`,`end_date`, `status`
FROM (
  SELECT `id`,`name`,`start_date`,`end_date`,
    CASE
      WHEN SYSDATE() <  `start_date` THEN 'WAITING'        
      WHEN SYSDATE() >= `start_date` AND SYSDATE() <= `end_date` THEN 'START'
      WHEN SYSDATE() >= `end_date`   THEN 'END'
    END `status`
  FROM teams) AS T
WHERE `status` = 'START';

或者您可以复制WHERE子句中的逻辑,但大多数人不愿意这样做。另请注意,此解决方案允许您只需更改WHERE子句以获取其他结果集:

  • WHERE status = 'WAITING'
  • WHERE status = 'END'

在设置这种方式后,你不必乱用逻辑。

答案 1 :(得分:2)

这不是同样的事情(我是SQL Server的小伙子,如果我遗漏某些内容或语法不是100%,请原谅我吗?)

SELECT `id`,`name`,`start_date`,`end_date`, 'START' AS `status`
FROM Teams 
WHERE SYSDATE() >= `start_date` AND SYSDATE() <= `end_date`

答案 2 :(得分:1)

试试这个,你试图使用别名

SELECT `id`,`name`,`start_date`,`end_date`,
CASE
WHEN SYSDATE() <  `start_date` THEN 'WAITING'        
WHEN SYSDATE() >= `start_date` AND SYSDATE() <= `end_date` THEN 'START'
WHEN SYSDATE() >= `end_date`   THEN 'END'
END `status`
FROM teams WHERE SYSDATE() between `start_date` and `end_date`;