Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

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

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

Код:

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, 17:19   #3
Alex_p
Пользователь
 
Регистрация: 05.09.2016
Сообщений: 10
Репутация: 10
По умолчанию

Цитата:
Сообщение от 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, 17:27   #4
evg_m
Профессионал
 
Регистрация: 20.04.2008
Сообщений: 4,682
Репутация: 2097
По умолчанию

Код:

select ignorlist.nomerto, a1.*
...
where a1.nomerto ='<тот самый ....''

Цитата:
nomerto у которого ни разу не встречается значение priz=1.
__________________
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума   Ответить с цитированием
Старый 25.04.2018, 17:27   #5
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 24,166
Репутация: 5241
По умолчанию

а если так попробовать:
Код:

select * from a1 where nomerto  not in (select nomerto  from a1 where priz=1)

Serge_Bliznykov вне форума   Ответить с цитированием
Старый 25.04.2018, 17:52   #6
Alex_p
Пользователь
 
Регистрация: 05.09.2016
Сообщений: 10
Репутация: 10
По умолчанию

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

select * from a1 where nomerto  not in (select nomerto  from a1 where priz=1)

Работает, но возвращает ВСЕ записи, где встречается найденый nomerto со значением priz=0.
Alex_p вне форума   Ответить с цитированием
Старый 25.04.2018, 18:18   #7
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 24,166
Репутация: 5241
По умолчанию

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

Код:

select DISTINCT nomerto from a1 where nomerto  not in (select nomerto  from a1 where priz=1)

Serge_Bliznykov вне форума   Ответить с цитированием
Старый 25.04.2018, 18:18   #8
evg_m
Профессионал
 
Регистрация: 20.04.2008
Сообщений: 4,682
Репутация: 2097
По умолчанию

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

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

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

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

Код:

select DISTINCT nomerto from a1 where nomerto  not in (select nomerto  from a1 where priz=1)

А так - возвращает значение только одного поля nomerto, а нужны все поля.
Alex_p вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


23:26.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru