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に対してクエリを実行すると思うため、クエリの速度が大幅に低下するためです。この種のアプローチが不可能であり、私が本当に期待していない場合は、最初に最大スカラー値を取得してから、上記のクエリに入れる 2 つの異なるクエリを呼び出す必要があります。単一のクエリで解決できるかどうかは疑問です。SELECT MAX(A.id) from AB.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最高を取得しています。idAB

于 2013-02-16T13:01:38.113 に答える