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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.04.2018, 15:45   #1
Alex_p
Пользователь
 
Регистрация: 05.09.2016
Сообщений: 15
По умолчанию Помогите сформировать запрос

Есть таблица в базе Firebird - a1 (IBTable1)
Таблица a1 - оперативный учет перемещений железок по объектам
В таблице a1 есть несколько полей, в том числе поле NOMERTO (значения поля могут повторяться в разных записях) и поле PRIZ (возможные значения - 0 или 1)
Как через ibQuery выбрать из таблицы a1 все уникальные по полю NOMERTO записи, в которых ни разу на всю таблицу a1 не встречается значение поля PRIZ = 1
Alex_p вне форума Ответить с цитированием
Старый 25.04.2018, 15:55   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Код:
select * 
from a1
left join ( -- добавим список того что нам НЕ надо
            select distinct nomerto --все РАЗНЫЕ nomerto
            from a1
            where priz=1 --где ХОТЯ  бы раз было priz =1
         ) as ignorlist on ignorlist.nomerto =a1.nomerto 
where ignorlist.nomerto is null --и отберем только то к чему мы НЕ смогли добавить
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Старый 25.04.2018, 16:19   #3
Alex_p
Пользователь
 
Регистрация: 05.09.2016
Сообщений: 15
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
Код:
select * 
from a1
left join ( -- добавим список того что нам НЕ надо
            select distinct nomerto --все РАЗНЫЕ nomerto
            from a1
            where priz=1 --где ХОТЯ  бы раз было priz =1
         ) as ignorlist on ignorlist.nomerto =a1.nomerto 
where ignorlist.nomerto is null --и отберем только то к чему мы НЕ смогли добавить
Спасибо за ответ. Но запрос вернул 0 записей при явном наличии одного nomerto у которого ни разу не встречается значение priz=1.
Alex_p вне форума Ответить с цитированием
Старый 25.04.2018, 16:27   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Код:
select ignorlist.nomerto, a1.*
...
where a1.nomerto ='<тот самый ....''
Цитата:
nomerto у которого ни разу не встречается значение priz=1.
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Старый 25.04.2018, 16:27   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

а если так попробовать:
Код:
select * from a1 where nomerto  not in (select nomerto  from a1 where priz=1)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.04.2018, 16:52   #6
Alex_p
Пользователь
 
Регистрация: 05.09.2016
Сообщений: 15
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
а если так попробовать:
Код:
select * from a1 where nomerto  not in (select nomerto  from a1 where priz=1)
Работает, но возвращает ВСЕ записи, где встречается найденый nomerto со значением priz=0.
Alex_p вне форума Ответить с цитированием
Старый 25.04.2018, 17:18   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Alex_p Посмотреть сообщение
Работает, но возвращает ВСЕ записи
просто добавьте DISTINCT

Код:
select DISTINCT nomerto from a1 where nomerto  not in (select nomerto  from a1 where priz=1)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.04.2018, 17:18   #8
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Цитата:
Работает, но возвращает ВСЕ записи, где встречается найденый nomerto со значением priz=0.
а ПОЧЕМУ он НЕ ДОЛЖЕН их возвращать?
Цитата:
в которых ни разу на всю таблицу a1 не встречается значение поля PRIZ = 1
ведь это-то выполнено, раз priz=0
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Старый 25.04.2018, 17:30   #9
Alex_p
Пользователь
 
Регистрация: 05.09.2016
Сообщений: 15
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
а ПОЧЕМУ он НЕ ДОЛЖЕН их возвращать?

ведь это-то выполнено, раз priz=0
Да. Но не выполнено "выбрать из таблицы a1 все УНИКАЛЬНЫЕ по полю NOMERTO записи"
Alex_p вне форума Ответить с цитированием
Старый 25.04.2018, 17:34   #10
Alex_p
Пользователь
 
Регистрация: 05.09.2016
Сообщений: 15
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
просто добавьте DISTINCT

Код:
select DISTINCT nomerto from a1 where nomerto  not in (select nomerto  from a1 where priz=1)
А так - возвращает значение только одного поля nomerto, а нужны все поля.
Alex_p вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите сформировать правильно запрос Anriuser SQL, базы данных 10 01.06.2017 21:05
Помогите сформировать запрос к БД на удаление записей Kvinto БД в Delphi 2 24.10.2016 12:13
сформировать запрос megostudent Свободное общение 6 22.01.2012 21:41
сформировать запрос Ghennadiy Общие вопросы Delphi 2 12.02.2011 17:58
сформировать запрос _ILYA_ Общие вопросы C/C++ 2 24.10.2010 20:06