запрос Sql....не работает
Пишу в Делфи ,через ДатаБейз и Query.
Код:
select Учитель.ФИО
from Учитель
where Учитель <> «Сидоров Сидор Сидорович» exists
(select *
from Преподает. Z
where Учитель.№_пасп = Z.№_пасп and
exists
( select *
from Преподает. Y
where Z.№_кл = Y.№_кл and
exists
( select *
from Учитель. Х
where Y.№_пасп = Х.№_пасп and
Х.ФИО = «Сидоров Сидор Сидорович» )))
Звучит так:
Найти Ф.И.О. учителей, которые преподают какие-либо предметы в тех же классах, что и Сидоров Сидор Сидорович.
Алгоритм его таков:
Код:
Находим Номер удостоверения учителя Сидорова Сидора Сидоровича.
Учитель
№_пасп ФИО тел
1234 Харитон Наум Абрамович 456-21-32
5678 Кудинова Елена Викторовна 222-22-22
9101 Пашетова Маргарита Юрьевна 741-85-25
1121 Гостев Алексей Сергеевич 963-36-96
1314 Сидоров Сидор Сидорович 852-25-85
1516 Хряков Виталий Владимирович 455-78-12
Найдем Номера классов в таблице «Преподает», в которых преподает учитель с (№_пасп) 1314.
Преподает
№_кл №_пасп наз_ пр
3 5678 Музыка
3 9101 Литература
3 1121 Французский
4 1234 Литература
4 5678 Музыка
5 1314 Физика
7 1516 Литература
7 1121 Французский
5 5678 Музыка
9 1234 Французский
9 9101 Москвоведение
9 1516 Литература
9 5678 Музыка
В результате получим:
№_кл
5
Далее найдем все НУ учителей, которые преподают в тех же классах, что и 1314 (Сидоров).
Преподает
№_кл №_пасп наз_ пр
3 5678 Музыка
3 9101 Литература
3 1121 Французский
4 1234 Литература
4 5678 Музыка
5 1314 Физика
7 1516 Литература
7 1121 Французский
5 5678 Музыка
9 1234 Французский
9 9101 Москвоведение
9 1516 Литература
9 5678 Музыка
Тогда имеем:
№_пасп
5678
Найдем Ф.И.О. учителей, которые совпадают с найденными НС, Ф.И.О. которых не равно Сидоров Сидор Сидорович.
Учитель
№_пасп ФИО тел
1234 Харитон Наум Абрамович 456-21-32
5678 Кудинова Елена Викторовна 222-22-22
9101 Пашетова Маргарита Юрьевна 741-85-25
1121 Гостев Алексей Сергеевич 963-36-96
1314 Сидоров Сидор Сидорович 852-25-85
1516 Хряков Виталий Владимирович 455-78-12
В результате получим:
ФИО
Кудинова Елена Викторовна
И поясните пожалуйста, как в SQL описывается UBDATE. Не совсем понимаю смысл этой функции. И как это в примере выглядит.
Код:
select Учитель.ФИО
from Учитель
where Учитель <> «Сидоров Сидор Сидорович» exists
(select *
from Преподает. Z
where Учитель.№_пасп = Z.№_пасп and
exists
( select *
from Преподает. Y
where Z.№_кл = Y.№_кл and
exists
( select *
from Учитель. Х
where Y.№_пасп = Х.№_пасп and
Х.ФИО = «Сидоров Сидор Сидорович» )))
а какая используется СУБД? она может не поддерживать такие подзапросы.
а какая используется СУБД? она может не поддерживать такие подзапросы.
Использую Парадокс в Делфи. Там далее через DataSoures.
С этим как таковым я справилась. Но у меня теперь другая беда, апдейт не работает. Выдает ошибку Token:update
Не пойму в чем дело.
select prepodaet.name_pr
from prepodaet where exists
(select *
from vedet x where prepodaet.nom_pasp = x.nom_pasp
and x.name_gr = "Chebyrashka")
update prepodaet set name_pr = 'Muzik'
where name_pr = 'French' in (select prepodaet.name_pr
from prepodaet where exists
(select *
from vedet x where prepodaet.nom_pasp = x.nom_pasp
and x.name_gr = "Chebyrashka"))
Использую Парадокс в Делфи. Там далее через DataSoures.
С этим как таковым я справилась. Но у меня теперь другая беда, апдейт не работает. Выдает ошибку Token:update
Не пойму в чем дело.
select prepodaet.name_pr
from prepodaet where exists
(select *
from vedet x where prepodaet.nom_pasp = x.nom_pasp
and x.name_gr = "Chebyrashka")
update prepodaet set name_pr = 'Muzik'
where name_pr = 'French' in (select prepodaet.name_pr
from prepodaet where exists
(select *
from vedet x where prepodaet.nom_pasp = x.nom_pasp
and x.name_gr = "Chebyrashka"))
Странный какой-то синтаксис...
Может я чего не понимаю, но обычно, если хотят проверить, входит ли значение в множество, то пишут так:
where значение in (select ...)
где (в Вашем случае) в качестве значения пишут либо name_pr, либо 'French' (но не name_pr='French').
Если хотят проверить, существует ли хоть одна запись, удовлетворяющая некоторым условиям, то пишут:
where exists (select ...)
причем перед exists не надо писать Учитель <> «Сидоров Сидор Сидорович».
И еще полезная ссылка http://www.sql-ex.ru/help/
С уважением, Валера.