Mysql别名数据没有选择它

时间:2012-12-18 12:03:30

标签: mysql

抱歉,不知道如何制定这个问题。我会试着解释一下。这是一个查询:

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优化查询而不会将相同的数据连接两次?

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

3 个答案:

答案 0 :(得分:1)

直接在相关的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

答案 1 :(得分:1)

首先,MySQL在任何较新版本上执行此优化。

其次你需要写

WHERE CONCAT(uno, due, tre)  LIKE '...' 

没有别名 - 别名在字段列表中定义,而不在WHERE子句中(但是当然,你可以在where子句中使用

答案 2 :(得分:0)

如果你不想选择它应该有效:

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