由于我不能在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
答案 0 :(得分:0)
将谓词从WHERE
子句移动到HAVING
子句,您可以通过它的别名引用field2:
在第一个查询中,只需将WHERE
更改为HAVING
即可。这将有效。
(HAVING
子句在准备好之后对结果集进行操作; WHERE
子句在处理中更早得到评估,它确定哪些行包含在结果集中,并且可以过滤掉很多行,这使事情更有效。
注意:您的查询可能不是获得所需结果集的最有效方法;但是没有足够的信息来提出建议。