0

別のテーブルを結合するクエリを作成しようとしていますが、この場合、サブクエリの左側のテーブルの列の1つからの値を使用する必要があります。そうすると、mySQLがそのような名前の列を見つけることができないというエラーが表示されます。

まず、2つのテーブル(t1とt2)を参照するクエリを次に示します(@categoryは、プログラムからサブスクライブされるパラメーターです)。

SELECT t1.incID, t1.name, t1.sortBy, SQ.person, SQ.pointsValue
FROM table1 t1
LEFT OUTER JOIN (
    SELECT incID, person, IF( t1.sortBy=0, max(points), min(points) ) pointsValue
    FROM table2
    GROUP BY incID
) SQ ON SQ.incID = t1.incID
WHERE t1.category=@category
ORDER BY t1.name ASC
LIMIT 0 , 30

さて、このクエリを実行すると、返されるエラーは次のとおりです。#1054-'フィールドリスト'の不明な列't1.sortBy'

t1.sortBy=0を0=0に置き換えると、クエリは正常に実行されるため、mySQLが操作の順序をどのように実行するかについて混乱しているように見えますか?

誰かがmySQLがこのようなクエリの操作の順序をどのように実行するか、そしてこの問題をどのように回避できるかを明確にしていただけますか?

4

1 に答える 1

1

派生テーブルで外部テーブルを参照することはできません。IFロジックを外側に移動する必要があります。

SELECT t1.incID, t1.name, t1.sortBy, SQ.person, 
       IF( t1.sortBy=0, maxPoints, minPoints) pointsValue
FROM table1 t1
LEFT OUTER JOIN (
    SELECT incID, person, max(points) maxPoints, min(points) minPoints
    FROM table2
    GROUP BY incID
) SQ ON SQ.incID = t1.incID
WHERE t1.category=@category
ORDER BY t1.name ASC
LIMIT 0 , 30
于 2012-04-08T01:24:48.323 に答える