【问题标题】:having condition on result of a subquery in mysql在mysql中对子查询的结果有条件
【发布时间】:2011-02-18 23:29:20
【问题描述】:

我正在尝试运行这样的查询

SELECT a, b , c, (SELECT INNULL(x,y)) as mycol WHERE mycol < 400 ;

但它给出了错误

#1054 - Unknown column 'mycol' in 'where clause'

这样做的正确方法是什么?

谢谢。

【问题讨论】:

    标签: mysql sql subquery mysql-error-1054 ifnull


    【解决方案1】:

    MS SQL 中也是如此,所以我假设 MySQL 中存在同样的问题。

    尝试将 WHERE 更改为 HAVINGWHERE 子句看不到您重命名的列。

    HAVING 的工作方式与 WHERE 相同,例如 (mycol 5)。

    GROUP BY 应该在 HAVING 之前。

    查看链接中的示例。

    http://www.databasejournal.com/features/mysql/article.php/3469351/The-HAVING-and-GROUP-BY-SQL-clauses.htm

    【讨论】:

    • 谢谢,但对不起,我忘了提到我也在这个查询中使用了 group by 子句,这似乎破坏了拥有的东西。如果有多个条件需要检查,语法是什么?
    • 我已经编辑了我的答案。如果这是您想要的,只需将其标记为答案。
    • 感谢这在一个小样本查询中起作用,稍后将检查它是否在更大的查询中起作用。非常感谢。
    • 别忘了把它标记为答案。如果您得到答案,请在您的其他问题中执行此操作。
    • 好的会做,但有点困惑。我点击了这个答案旁边的绿色勾号图标。我猜是这样。
    【解决方案2】:

    @hgulyan 我怀疑你的回答。阻止使用WHERE 子句的不是重命名,而是子查询。所以假设我有一个查询:

    SELECT id as ID FROM user WHERE ID > 10;
    

    这会很好地工作。
    现在假设我还有一个查询:

    SELECT name, (SELECT id FROM user_detail WHERE user_id = 20) as ID FROM user WHERE ID > 19;
    

    这个特定的查询会产生如下错误:

    未知的列 ID

    所以,这是关于使用子查询和列别名,而不仅仅是列别名。 因此在这种情况下,您将不得不使用HAVING 而不是WHERE

    【讨论】:

      猜你喜欢
      • 2015-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-26
      • 2011-07-16
      • 1970-01-01
      相关资源
      最近更新 更多