我想这是一件非常简单的事情,但我无法找到解决方法。这是我的询问;
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
它与范围或类似的东西有关吗?
答案 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
子句中的第一个查询,以便仅在表id
和A
之间的匹配中获得最高B
。