|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
21.05.2012, 11:06 | #1 |
Новичок
Джуниор
Регистрация: 21.05.2012
Сообщений: 5
|
Упущено требование в запросе
Добрый день!
Запрос : вывести те отделения,где есть объекты ,по которым ВСЕ договора заключены только в 2012 году, те если есть два объекта из одного отделения , договора по которым заключены 2011 у первого и в 2012 у второго, то это отделение не выводить... я сделал вложенный запрос , только как исключить отделение где у двух объектов одного отделения разные года не могу сообразить Последний раз редактировалось агентА; 21.05.2012 в 13:28. |
21.05.2012, 16:13 | #2 | |
Форумчанин
Регистрация: 20.05.2012
Сообщений: 311
|
Цитата:
(Вообще, это касается всех) |
|
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 |
Форумчанин
Регистрация: 26.03.2012
Сообщений: 665
|
Запрос выкинуть, написать новый и правильный.
|
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 |
Форумчанин
Регистрация: 26.03.2012
Сообщений: 665
|
Код никуда не годен, кол поставят и правы будут.
|
22.05.2012, 09:56 | #10 |
Новичок
Джуниор
Регистрация: 21.05.2012
Сообщений: 5
|
Там вместо or not exists должно быть and exists ;замаялся под конец, не то выложил...
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Фильтр в запросе | 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 |