未知的列错误

时间:2013-02-16 12:59:10

标签: mysql

我想这是一件非常简单的事情,但我无法找到解决方法。这是我的询问;

SELECT A.*,MAX(A.id) as X
FROM A
INNER JOIN B ON(B.id=A.id)
WHERE B.y > IF(X < 75, 0, 100)

mysql出现错误,说“X”列未知。我不想将if子句中的'X'替换为SELECT MAX(A.id) from A,因为它会大大减慢查询速度,因为我认为它会SELECT MAX(A.id) from A查询B.y之间的每个值比较。如果这种方法不可能,我并不是真正期望的,那么我必须首先调用两个不同的查询来获取最大标量值,然后将其放入上面的查询中。我想知道它是否可以在一个查询中解决。

类似的问题被问到但似乎还没有解决: https://stackoverflow.com/questions/9052196/mysql-error-1054-unknown-column-on-clause

它与范围或类似的东西有关吗?

2 个答案:

答案 0 :(得分:2)

您不能在WHERE子句中使用别名。您将需要使用完整表达式,或使用HAVING。我会尝试两者,看看哪一个提供了最好的表现。

答案 1 :(得分:1)

试试这个:

SELECT A.*,MAX(A.id) as X
FROM A
INNER JOIN B ON(B.id=A.id)
HAVING B.y > IF(MAX(A.id) < 75, 0, 100)

@ andryi-m是对的。查询甚至没有编译。

编辑:下面是一个非常难看的解决方案,但我认为它会起作用。很确定它可以改进:

SELECT A.*
FROM A
INNER JOIN B ON(B.id=A.id)
WHERE B.y > IF((SELECT MAX(A.id) FROM A INNER JOIN B ON (B.id=A.id)) < 75, 0, 100)

我正在重复WHERE子句中的第一个查询,以便仅在表idA之间的匹配中获得最高B