抱歉,不知道如何提出这个问题。我会尽力解释。这是一个查询:
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的查询以不两次重复相同数据?
我希望问题清楚。谢谢你的想法。
最佳答案
在相关的WHERE
或HAVING
子句中直接使用所需的表达式:
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