【问题标题】:Mysql - Can I fetch a subselect result and use it in a WHERE clause?Mysql - 我可以获取子选择结果并在 WHERE 子句中使用它吗?
【发布时间】:2010-10-31 06:53:05
【问题描述】:

我想在 where 子句中获取和使用从 MySQL 中的子选择返回的值。这可能吗?将子查询写出两次似乎没有必要——但是如果我需要,MySQL 会足够聪明,只运行一次吗?

我尝试了以下不起作用:

SELECT 
  (SELECT 1 FROM table WHERE somereallycomplicatedclause = 'something')
      AS subselectresult 
FROM content WHERE subselectresult = 1

这会产生这个错误:

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

谢谢

【问题讨论】:

    标签: mysql sql mysql-error-1054


    【解决方案1】:

    您不能在 WHERE 子句中使用列别名。尝试将其放入 HAVING,然后它应该可以工作。

    此处说明:http://dev.mysql.com/doc/refman/5.0/en/problems-with-alias.html

    【讨论】:

      【解决方案2】:

      您显示的查询很奇怪。您可以通过这种方式获得相同的结果(叉积):

      SELECT S.One
      FROM contacts,
      (SELECT DISTINCT 1 as One FROM table WHERE somereallycomplicatedclause = 'something') S
      

      我认为你应该多说一下你试图解决什么(例如,子查询和联系人表之间的链接是什么)?

      【讨论】:

      • 对不起,我过于简单化并且使用了错误的表名。它是一个目录,子选择返回当前联系人是否可以访问每一行的部分内容。所以子选择使用 ContentId ,这是我正在查询的主表的主键。可能有一种更简洁的方法来执行此操作,但我被绑定到现有模式中,并且查询最终变得更加复杂。整个子选择 SQL 是由不同的代码生成的,否则我可能会使用连接。
      • 由不同的代码生成子查询是什么意思?我最初的想法是尝试以某种方式将其转换为连接(这就是询问更多细节的原因)。
      • 我不擅长MySQL,但是是否可以在MySQL中定义一个内部选择并返回结果的函数?您可以将当前行中的参数提供给函数并执行选择。但是,性能可能不会发生太大变化,因为原则上,您需要为外部选择产生的每一行执行内部选择。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-26
      • 1970-01-01
      • 2017-07-18
      • 2017-05-07
      • 1970-01-01
      • 1970-01-01
      • 2012-04-28
      相关资源
      最近更新 更多