Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.05.2011, 12:25   #11
Daramant
Форумчанин
 
Регистрация: 06.01.2009
Сообщений: 340
По умолчанию

Цитата:
нет, не помогло...
Видимо, имелось ввиду having, а не where:
Код:
SELECT  p.название,count(s.КодП)
from (Ставят s
left join Постановки p ON (p.КодП=s.КодП))
left join Режиссёры r ON (s.КодР=r.КодР)
Group BY  p.название 
having count(s.КодП)=1
Цитата:
что является ответом на задачу (т.е. что должен вернуть правильный, с точки зрения преподавателя, запрос)?!
Я думал про 1 и 3:
Цитата:
"Турандот" поставлена A
"Дядя Ваня" поставлена A и C
Истинный успех – это то, что Вы сделали в сравнении с тем, что могли бы сделать.
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили "Титаник".
Daramant вне форума Ответить с цитированием
Старый 01.05.2011, 14:07   #12
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Видимо, имелось ввиду having, а не where:
ага. уже исправил.


Цитата:
Я думал про 1 и 3:
Цитата:
"Турандот" поставлена A
"Дядя Ваня" поставлена A и C
возможно, возможно...
ну, тогда:
1) мой вариант из пост #4 не прокатит (он выбирает только те постановки, где режиссёр A был в одиночестве)
2) я не знаю, как можно решить задачу без подзапросов...

Думаю, что нужно ТОЧНОЕ и БУКВАЛЬНОЕ задание, именно в том виде, как его дал преподаватель, буква в букву, со всеми знаками препинания! Ибо, возможно, что автор топика добавил в задание немножко от себя..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 01.05.2011, 14:19   #13
Daramant
Форумчанин
 
Регистрация: 06.01.2009
Сообщений: 340
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Думаю, что нужно ТОЧНОЕ и БУКВАЛЬНОЕ задание, именно в том виде, как его дал преподаватель, буква в букву, со всеми знаками препинания! Ибо, возможно, что автор топика добавил в задание немножко от себя..
Согласен. Подождем ответа от ТС.
Истинный успех – это то, что Вы сделали в сравнении с тем, что могли бы сделать.
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили "Титаник".
Daramant вне форума Ответить с цитированием
Старый 01.05.2011, 19:05   #14
BarbarisXX
Новичок
Джуниор
 
Регистрация: 30.04.2011
Сообщений: 3
По умолчанию

Нужно выводить все постановки, которые ставил А, один или с любыми другими режиссёрами, но без участия В!

Т.е. это будет "Турандот", "Дядя Ваня".

Вот формулировка преподавателя:

Вывести все постановки, которые поставил режиссёр А, но не ставил режиссёр Б. Учитывать факт, что режиссёры могут ставить постановки совместно.

И после того как я ему отправила запрос с not in...мне сказали "стараемся обходиться без вложенных sub-select'ов (т.е ситуация типа "... WHERE ... NOT IN (SELECT ...")."

Последний раз редактировалось Stilet; 01.05.2011 в 19:54.
BarbarisXX вне форума Ответить с цитированием
Старый 01.05.2011, 19:59   #15
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Вывести все постановки, которые поставил режиссёр А, но не ставил режиссёр Б.
Тупо и в лоб:
Код:
SELECT  p.название
from Ставят s
join Режиссёры r ON (s.КодР=r.КодР and r.фамилия<>'Б')
left join Постановки p ON (p.КодП=s.КодП)
where r.фамилия='A'
Не проверял...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.05.2011, 20:59   #16
Daramant
Форумчанин
 
Регистрация: 06.01.2009
Сообщений: 340
По умолчанию

Цитата:
Не проверял...
Проверил - не работает.
Если есть постановка, которую ставили и А и Б, то
Код:
join Режиссёры r ON (s.КодР=r.КодР and r.фамилия<>'Б')
проходит для одной из этих записей и отображается лишняя постановка.
Истинный успех – это то, что Вы сделали в сравнении с тем, что могли бы сделать.
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили "Титаник".
Daramant вне форума Ответить с цитированием
Старый 01.05.2011, 22:04   #17
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А если так, только не знаю скушает ли Access
Код:
SELECT DISTINCT P.*
  FROM Ставят S,Режиссёры R,Постановки P
    LEFT JOIN Ставят S1 ON S1.КодП=P.КодП
    LEFT JOIN Режиссёры R1 ON R1.КодР=S1.КодО AND R1.фамилия='B'
  WHERE P.КодП=S.КодП AND S.КодО=R.КодР AND R.фамилия='А' AND R1.КодР IS NULL
upd хорошо подумал - не пойдет, а вот следующая пожалуй то что надо

Код:
SELECT P.*
  FROM Постановки P,Режиссёры R,Ставят S
    LEFT JOIN Режиссёры R1 ON R1.КодР=S.КодО AND R1.фамилия='B'
  WHERE P.КодП=S.КодП AND S.КодО=R.КодР AND R.фамилия='А' AND R1.КодР IS NULL
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 01.05.2011 в 23:12.
Аватар вне форума Ответить с цитированием
Старый 03.05.2011, 10:14   #18
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,527
По умолчанию

Код:
SELECT  p.название
from Постановки П
left join Ставят sА on (sA.кодП =П.кодП and sA.кодР ='A' ) --постановки режисера А
left join Ставят sB on (sB.кодП =П.кодП and sB.кодР ='В' ) --постановки режисера B
where sB.кодП is NULL  --- режисер В не участвует
   and sA.кодП is not NULL --- режисер А участвует
варианты с использованием таблицы режисеры.(и конечно же аналогично для второго режисерра).
Код:
left join ( Ставят sА inner join Режисерры RA on ( SA.кодR =rA.кодR and ra.FIO='первый' ) ) on (sA.кодП =П.кодП)
есть подозрения что использование связки inner и использование внутреннего фильтра по имени режиссера не приведет к успеху.
Код:
left join ( Ставят sА left join Режисерры RA on SA.кодR =rA.кодR) on (sA.кодП =П.кодП and ra.FIO='первый' )
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 03.05.2011 в 10:35.
evg_m вне форума Ответить с цитированием
Старый 03.05.2011, 14:41   #19
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
Код:
SELECT  p.название
from Постановки П
left join Ставят sА on (sA.кодП =П.кодП and sA.кодР ='A' ) --постановки режисера А
left join Ставят sB on (sB.кодП =П.кодП and sB.кодР ='В' ) --постановки режисера B
where sB.кодП is NULL  --- режисер В не участвует
   and sA.кодП is not NULL --- режисер А участвует
Это подошло бы в случае, если заданы коды двух режисеров, а поскольку, как я понял, фигурируют фамилии - то
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 03.05.2011, 14:58   #20
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,527
По умолчанию

Цитата:
Это подошло бы в случае, если заданы коды двух режисеров, а поскольку, как я понял, фигурируют фамилии - то
смотри P.S. предыдущего сообщения
Цитата:
варианты с использованием таблицы режисеры.(и конечно же аналогично для второго режисерра).
Ну или код режисера задавать через кодР = ( select кодР from режисеры where FIO=''фамилия' )
Хотя... это получается вложенный запрос.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 03.05.2011 в 15:04.
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Принадлежность точки Stereo Паскаль, Turbo Pascal, PascalABC.NET 0 14.12.2010 11:26
ПРИНАДЛЕЖНОСТЬ ТОЧКИ Dar93ina Помощь студентам 1 03.12.2010 16:41
Принадлежность класса EUGY Общие вопросы C/C++ 3 11.07.2010 17:10
Принадлежность точки Forro Помощь студентам 4 26.05.2008 14:33