抱歉,不知道如何提出这个问题。我会尽力解释。这是一个查询:

SELECT CONCAT(uno, due, tre) AS smth ... HAVING smth LIKE ...


它允许我对聚合的多列数据执行操作,并且虽然可以正常运行,但我不希望实际上选择并返回“ smth”列的结果。是否可以做这样的事情?:

SELECT ... WHERE CONCAT(uno, due, tre) AS smth LIKE '...' OR smth LIKE '...' ...


还是mysql已经优化了具有多个相同concat的查询以不两次重复相同数据?

我希望问题清楚。谢谢你的想法。

最佳答案

在相关的WHEREHAVING子句中直接使用所需的表达式:

SELECT
  -- etc.
HAVING CONCAT(uno, due, tre) LIKE '...'
    OR CONCAT(uno, due, tre) LIKE '...'
  -- etc.


MySQL在每个查询中仅对给定相同参数的确定性函数进行一次评估,因此尽管查询很冗长,它的效率也不低(节省的解析量很少)。

或者,您可以对查询执行外部选择,以仅返回感兴趣的列:

SELECT ... FROM (
  SELECT CONCAT(uno, due, tre) AS smth ... HAVING smth LIKE ...
) t

10-07 17:57