如何在sql SELECT和WHERE中避免使用相同的表达式?

时间:2014-03-02 09:05:30

标签: mysql sql

有没有办法避免在查询中写两次表达式,例如我的示例中的表达式?

SELECT
    MATCH(test) AGAINST("str" IN BOOLEAN MODE) AS testRelevance,
    .......
FROM
    mytable
WHERE
    .......
    MATCH(test) AGAINST("str" IN BOOLEAN MODE) > 0

我已经尝试过了

SELECT
    MATCH(test) AGAINST("str" IN BOOLEAN MODE) AS testRelevance,
    .......
FROM
    mytable
WHERE
    .......
HAVING
    testRelevance > 0

但这对大桌子来说并不好(仅在某些情况下显然?)

提前谢谢

1 个答案:

答案 0 :(得分:1)

使用派生表:

select *
from (
   select MATCH(test) AGAINST("str" IN BOOLEAN MODE) AS testRelevance,
          ....
   from ...
   where ... 
) as t
where testRelevance > 0

它应该与没有派生表的版本一样快,但是鉴于MySQL有限的查询优化器,您应该检查执行计划,看看MySQL是否确实可以将条件有效地推送到派生表中并使用索引。 / p>