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

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

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Access
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.05.2012, 11:06   #1
агентА
Новичок
Джуниор
 
Регистрация: 21.05.2012
Сообщений: 5
По умолчанию Упущено требование в запросе

Добрый день!
Запрос : вывести те отделения,где есть объекты ,по которым ВСЕ договора заключены только в 2012 году, те если есть два объекта из одного отделения , договора по которым заключены 2011 у первого и в 2012 у второго, то это отделение не выводить...
я сделал вложенный запрос , только как исключить отделение где у двух объектов одного отделения разные года не могу сообразить
Вложения
Тип файла: zip DreamHome v.1.0.zip (164.9 Кб, 14 просмотров)

Последний раз редактировалось агентА; 21.05.2012 в 13:28.
агентА вне форума Ответить с цитированием
Старый 21.05.2012, 16:13   #2
Андрэич
Форумчанин
 
Аватар для Андрэич
 
Регистрация: 20.05.2012
Сообщений: 311
По умолчанию

Цитата:
Сообщение от агентА Посмотреть сообщение
Добрый день!
Запрос : вывести те отделения,где есть объекты ,по которым ВСЕ договора заключены только в 2012 году, те если есть два объекта из одного отделения , договора по которым заключены 2011 у первого и в 2012 у второго, то это отделение не выводить...
я сделал вложенный запрос , только как исключить отделение где у двух объектов одного отделения разные года не могу сообразить
Поверьте, будет намного для вас эффективней, если вы напишите здесь текст запроса. И не забывайте оформлять его тегами для удобочитаемости
(Вообще, это касается всех)
Андрэич вне форума Ответить с цитированием
Старый 21.05.2012, 16:40   #3
агентА
Новичок
Джуниор
 
Регистрация: 21.05.2012
Сообщений: 5
По умолчанию

Спасибо за совет ; весь день маюсь с этим запросом и крайнее негодование даёт о себе знать...

вот моя новая версия запроса :

SELECT BranchNo, STR(PostCode)+' '+City+' '+Street AS [Branch Address]
FROM Branch
WHERE BranchNo IN
(SELECT PropertyBranchNo
FROM PropertyForRent
WHERE (PropertyNo IN
(SELECT LeasePropertyNo
FROM Lease
WHERE val(RentStart) >= '2012') AND PropertyNo NOT IN
(SELECT LeasePropertyNo
FROM Lease
WHERE val(RentStart) < '2012'))
);

старая выглядит так :

SELECT BranchNo, STR(PostCode)+' '+City+' '+Street AS [Branch Address]
FROM Branch
WHERE BranchNo IN
(SELECT PropertyBranchNo
FROM PropertyForRent
WHERE PropertyNo IN
(SELECT LeasePropertyNo
FROM Lease
WHERE dateDiff("yyyy",RentStart,Date()) = 0));

Последний раз редактировалось агентА; 21.05.2012 в 17:09.
агентА вне форума Ответить с цитированием
Старый 21.05.2012, 19:13   #4
Андрэич
Форумчанин
 
Аватар для Андрэич
 
Регистрация: 20.05.2012
Сообщений: 311
По умолчанию Ой-ой-ой :-)

Три уровня вложенности...
Предположу, что это будет сильно тормозить, особенно на больших объёмах данных.
Почему не хотите делать в VBA? Проще, удобней, наглядней.
Если же всё-таки настаиваете на SQL, то обычно делают так: доводят до ума в отдельности все составляющие - в вашем случае это каждый подзапрос, начиная с самого "глубокого". И в этом случае обыкновенно ошибка (или заблуждение) сразу обнаруживается...Попробуйте
Андрэич вне форума Ответить с цитированием
Старый 21.05.2012, 19:24   #5
=master=
Форумчанин
 
Регистрация: 26.03.2012
Сообщений: 665
По умолчанию

Запрос выкинуть, написать новый и правильный.
=master= вне форума Ответить с цитированием
Старый 21.05.2012, 20:17   #6
агентА
Новичок
Джуниор
 
Регистрация: 21.05.2012
Сообщений: 5
По умолчанию

Всё, переделал,работает...
я студент и отменя потребовали выполнения задания в таком виде, вот и извиваюсь...
агентА вне форума Ответить с цитированием
Старый 21.05.2012, 21:22   #7
Андрэич
Форумчанин
 
Аватар для Андрэич
 
Регистрация: 20.05.2012
Сообщений: 311
По умолчанию

Цитата:
Сообщение от агентА Посмотреть сообщение
Всё, переделал,работает...
я студент и отменя потребовали выполнения задания в таком виде, вот и извиваюсь...
Сколько общее количество записей?
Сколько примерно выполняется запрос?
Андрэич вне форума Ответить с цитированием
Старый 21.05.2012, 22:08   #8
агентА
Новичок
Джуниор
 
Регистрация: 21.05.2012
Сообщений: 5
По умолчанию

запрос выполняет мгновенно, так база небольшая, вот код, кому любопытно

SELECT BranchNo, STR(PostCode)+' '+City+' '+Street AS [Branch Address]
FROM Branch
WHERE BranchNo NOT IN
(SELECT PropertyBranchNo
FROM Propertyforrent
WHERE PropertyNo IN
(SELECT LeasePropertyNo
FROM Lease
WHERE YEAR(RentStart)<2012
) OR NOT EXISTS
(SELECT PropertyBranchNo
FROM PropertyForRent
WHERE PropertyNo IN
(SELECT LeasePropertyNo
FROM Lease)
AND PropertyBranchNo = BranchNo) );
агентА вне форума Ответить с цитированием
Старый 21.05.2012, 22:37   #9
=master=
Форумчанин
 
Регистрация: 26.03.2012
Сообщений: 665
По умолчанию

Код никуда не годен, кол поставят и правы будут.
=master= вне форума Ответить с цитированием
Старый 22.05.2012, 09:56   #10
агентА
Новичок
Джуниор
 
Регистрация: 21.05.2012
Сообщений: 5
По умолчанию

Там вместо or not exists должно быть and exists ;замаялся под конец, не то выложил...
агентА вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Фильтр в запросе mavlon_m SQL, базы данных 4 09.12.2010 14:25
Требование к воспроизведению звука по нажатию клавиши клавиатуры в Bass.dll Fluffy123 Мультимедиа в Delphi 8 15.05.2010 21:48
Like в запросе АлёнаP Microsoft Office Access 14 13.04.2009 21:35
автоинкремент в запросе ГОСЕАН БД в Delphi 13 01.02.2008 16:12