0

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

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

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

4

2 回答 2

2

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

于 2013-02-16T13:02:26.900 回答
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仅在表AB.

于 2013-02-16T13:01:38.113 回答