抱歉,不知道如何制定这个问题。我会试着解释一下。这是一个查询:
SELECT CONCAT(uno, due, tre) AS smth ... HAVING smth LIKE ...
它允许我对聚合的多列数据执行操作,虽然它工作正常,但我不希望实际选择并返回“smth”列的结果。是否有可能做这样的事情?:
SELECT ... WHERE CONCAT(uno, due, tre) AS smth LIKE '...' OR smth LIKE '...' ...
或者mysql是否已经使用多个相同的concats优化查询而不会将相同的数据连接两次?
我希望问题很清楚。谢谢你的想法。
答案 0 :(得分:1)
直接在相关的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
答案 1 :(得分:1)
首先,MySQL在任何较新版本上执行此优化。
其次你需要写
WHERE CONCAT(uno, due, tre) LIKE '...'
没有别名 - 别名在字段列表中定义,而不在WHERE
子句中(但是当然,你可以在where子句中使用)
答案 2 :(得分:0)
如果你不想选择它应该有效:
SELECT ... WHERE CONCAT(uno, due, tre) LIKE '...' OR smth LIKE '...' ...