0

列の 1 つの値に基づいてクエリが実行されるときに、where 句を動的に変更することは可能ですか? つまり、(これは完全にでっち上げの例です) 生徒、出席したクラス、および遅刻のテーブルがあります。生徒ごとに、前回の遅刻以降に出席したすべてのクラスのリストを表示したいと考えています。したがって、クエリは次のようになります。

SELECT student, class, classdate
FROM attendance
WHERE classdate>(<<SOME QUERY that selects the most recent tardy for each student>>)
ORDER BY student,classdate;

または、より明確にするために、より多くのプログラミング用語に置き換えると、次のようになります。

for studentName in (SELECT distinct(student) FROM attendance):
    SELECT student, class, classdate
    FROM attendance
    WHERE classdate>(SELECT classdate 
                     FROM attendance 
                     WHERE tardy=true AND student=studentName
                     ORDER BY classdate DESC
                     LIMIT 1)
    ORDER BY classdate;

単一のクエリでこれを行う方法はありますか、または各学生に対して個別のクエリを実行する必要がありますか (基本的に上記のループに従って)? 実際の使用例は説明が複雑ですが (レコードの認証と、どのレコードを調べる必要があるかということです)、概念的には同じです。

4

1 に答える 1

1

テーブルに複数のエイリアス (a1と などa2) を使用するだけattendanceで、サブクエリで「外部」テーブル エイリアスを参照できます。

SELECT student, class, classdate
FROM attendance a1
WHERE classdate>(SELECT classdate 
                 FROM attendance a2
                 WHERE tardy=true AND a2.student=a1.student
                 ORDER BY classdate DESC
                 LIMIT 1)
ORDER BY classdate;
于 2012-06-30T19:48:43.403 に答える