Первый запрос, который работает здесь:
SELECT * FROM Student RIGHT JOIN (
SELECT t1.SId, class1, class2 FROM
(SELECT SId, score as class1 FROM sc WHERE sc.CId = '01')AS t1,
(SELECT SId, score AS class2 FROM sc WHERE sc.CId = '02')AS t2
WHERE t1.SId = t2.SId
AND t1.class1 > t2.class2
)r
ON Student.SId = r.SId;
Таблица r
создается с помощью этого подзапроса:
SELECT t1.SId, class1, class2 FROM
(SELECT SId, score as class1 FROM sc WHERE sc.CId = '01')AS t1,
(SELECT SId, score AS class2 FROM sc WHERE sc.CId = '02')AS t2
WHERE t1.SId = t2.SId
AND t1.class1 > t2.class2
t1.Sid
, class1
и class2
разрешены без двусмысленности. t1.Sid
становится доступным как r.Sid
в соединении Student.SId = r.Sid
. Следовательно, запрос работает.
Второй запрос, вызывающий проблему, находится здесь:
SELECT t1.SId, class1, class2, Student.* FROM
(SELECT SId, score as class1 FROM sc WHERE sc.CId = '01')AS t1,
(SELECT SId, score AS class2 FROM sc WHERE sc.CId = '02')AS t2
WHERE t1.SId = t2.SId
AND t1.class1 > t2.class2
)r
LEFT JOIN Student
ON Student.SId = r.SId;
Необходимо решить две проблемы:
- Проблема 1:
Student.*
не решена, поскольку в разделе FROM нет ссылок на него.
- Проблема 2: Таблица
r
построена неправильно.
При рассмотрении двух проблем возникает измененный второй запрос, который работает:
SELECT * from
(SELECT t1.SId, class1, class2 FROM
(SELECT SId, score as class1 FROM sc WHERE sc.CId = '01')AS t1,
(SELECT SId, score AS class2 FROM sc WHERE sc.CId = '02')AS t2
WHERE t1.SId = t2.SId
AND t1.class1 > t2.class2
)r
LEFT JOIN Student
ON Student.SId = r.SId;