MySql子查询作为列和别名

时间:2014-05-09 15:53:50

标签: mysql subquery alias where-clause

由于我不能在WHERE子句中使用表达式结果,我需要重复表达式。但由于我也在上面使用它,作为专栏 - 它似乎浪费资源。

可以避免吗?

一些代码:

SELECT field1,
       (SELECT some_field
        FROM   another_table) AS field2
FROM   table_1
WHERE  NOT field2 IS NULL  
# won't work

SELECT field1,
       (SELECT some_field
        FROM   another_table) AS field2
FROM   table_1
WHERE  NOT (SELECT some_field FROM   another_table) IS NULL  
# will work

1 个答案:

答案 0 :(得分:0)

将谓词从WHERE子句移动到HAVING子句,您可以通过它的别名引用field2:

在第一个查询中,只需将WHERE更改为HAVING即可。这将有效。

HAVING子句在准备好之后对结果集进行操作; WHERE子句在处理中更早得到评估,它确定哪些行包含在结果集中,并且可以过滤掉很多行,这使事情更有效。


注意:您的查询可能不是获得所需结果集的最有效方法;但是没有足够的信息来提出建议。