powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Запрос в oracle SQL для поиска по указанным параметрам и не по всем заданным параметрам
19 сообщений из 19, страница 1 из 1
Запрос в oracle SQL для поиска по указанным параметрам и не по всем заданным параметрам
    #39965184
Lev5137
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите пожалуйста с одним запросом.
Найти человека по указанным параметрам:
- телефон
- ФИО
- документ
Обязательное требование по запросу где поиск по параметрам. Надо учесть что параметры могут быть не указаны. То есть поиск человека только по фио. И это должно быть в 1 запрос как то.
Писал запрос, но он у меня не срабатывает так как мне надо. я так понял чтобы выводило либо со всеми параметрами, либо без каких то параметров, но при этом там не пустые поля должны быть, а просто считается, что при формировании условия человек не ввел данный параметр для поиска. Вот как в этой ситуации написать запрос.
Я писал запрос вот так, но он не выдает то что мне нужно, если я например оставлю пустые значения ' ':
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
 
select pd.ID_PERSONAL_DATA,
pd.P_NAME,
pd.P_SURNAME,
pd.PATRONYMIC,
pd.PHONE_NUMBER,
dc.DOCUMENT_NAME
FROM COURSEWORK.PERSONAL_DATA pd FULL OUTER JOIN COURSEWORK.DOCUMENTS d ON pd.id_personal_data=d.id_personal_data
FULL OUTER JOIN COURSEWORK.DOCUMENT_CATEGORY dc ON dc.id_document_category=d.id_document_category
where (pd.P_NAME='Анников' and pd.P_SURNAME='Евстигней' and pd.PATRONYMIC='Вадимович' and pd.PHONE_NUMBER = 89200571627 and dc.document_name='водительские права')
or (pd.P_NAME='Анников' and pd.P_SURNAME='Евстигней' and pd.PATRONYMIC='Вадимович' and pd.PHONE_NUMBER = 89200571627)
or (pd.P_NAME='Анников' and pd.P_SURNAME='Евстигней' and pd.PATRONYMIC='Вадимович' and dc.document_name='водительские права')
or (pd.P_NAME='Анников' and pd.P_SURNAME='Евстигней' and pd.PATRONYMIC='Вадимович');
...
Рейтинг: 0 / 0
Запрос в oracle SQL для поиска по указанным параметрам и не по всем заданным параметрам
    #39965202
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если ФИО есть всегда, зачем FULL OUTER ?
...
Рейтинг: 0 / 0
Запрос в oracle SQL для поиска по указанным параметрам и не по всем заданным параметрам
    #39965227
exciter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Lev5137,
может быть, что-то в таком духе?
Код: plsql
1.
2.
3.
4.
5.
 where (pd.P_NAME = nvl('Анников', pd.P_NAME) or (pd.p_name is null and 'Анников' is null))
   and (pd.P_SURNAME = nvl('Евстигней', pd.P_SURNAME) or (pd.P_SURNAME is null and 'Евстигней' is null))
   and (pd.PATRONYMIC = nvl('Вадимович', pd.PATRONYMIC) or (pd.PATRONYMIC is null and 'Вадимович' is null))
   and (pd.PHONE_NUMBER = nvl(89200571627, pd.PHONE_NUMBER) or (pd.PHONE_NUMBER is null and 89200571627 is null))
   and (dc.document_name = nvl('водительские права', dc.document_name) or (dc.document_name is null and 'водительские права' is null))
...
Рейтинг: 0 / 0
Запрос в oracle SQL для поиска по указанным параметрам и не по всем заданным параметрам
    #39965236
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lev5137,

Ну вот, спалил телефон Анникова Е.В. всему форуму.

PHONE_NUMBER, document_name сделать nvl(x, ''), входной параметр тоже и оставить первый вариант:
Код: plsql
1.
2.
where pd.P_NAME= :name and pd.P_SURNAME= :surname and pd.PATRONYMIC= :partonymic and
nvl(pd.PHONE_NUMBER,'') = :phone and nvl(dc.document_name, '') = :docname
...
Рейтинг: 0 / 0
Запрос в oracle SQL для поиска по указанным параметрам и не по всем заданным параметрам
    #39965968
Lev5137
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
exciter,
я думаю пойдет. Спасибо вам большое.
...
Рейтинг: 0 / 0
Запрос в oracle SQL для поиска по указанным параметрам и не по всем заданным параметрам
    #39965969
Lev5137
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
crutchmaster,
я даже чесно говоря не знал что можно в в обычном sql запросе так сделать. думал что это возможно только в pl/sql. спасибо вам огромное за запрос и за получение новых знаний.
...
Рейтинг: 0 / 0
Запрос в oracle SQL для поиска по указанным параметрам и не по всем заданным параметрам
    #39965970
Lev5137
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
crutchmaster,

Я посмотрел все работает спасибо вам большое. Выручили. А то я голову ломал как его можно написать.
...
Рейтинг: 0 / 0
Запрос в oracle SQL для поиска по указанным параметрам и не по всем заданным параметрам
    #39965971
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lev5137,

Воу, даже работает:)
...
Рейтинг: 0 / 0
Запрос в oracle SQL для поиска по указанным параметрам и не по всем заданным параметрам
    #39965975
Lev5137
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
exciter,

Я посмотрел все работает спасибо вам большое. Выручили. А то я голову ломал как его можно написать.
...
Рейтинг: 0 / 0
Запрос в oracle SQL для поиска по указанным параметрам и не по всем заданным параметрам
    #39965976
Lev5137
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
crutchmaster,

нет я перепутал. почему то вам отправилось. я переделал ваш запрос по аналогии с тем который написали выше и он у меня заработал.


select pd.ID_PERSONAL_DATA,
pd.P_NAME,
pd.P_SURNAME,
pd.PATRONYMIC,
pd.PHONE_NUMBER,
dc.DOCUMENT_NAME
FROM COURSEWORK.PERSONAL_DATA pd FULL OUTER JOIN COURSEWORK.DOCUMENTS d ON pd.id_personal_data=d.id_personal_data
FULL OUTER JOIN COURSEWORK.DOCUMENT_CATEGORY dc ON dc.id_document_category=d.id_document_category
where pd.P_NAME= :name and pd.P_SURNAME= :surname and pd.PATRONYMIC= :partonymic and
pd.PHONE_NUMBER = nvl(:phone,pd.PHONE_NUMBER) and dc.document_name = nvl(:docname, dc.document_name);
...
Рейтинг: 0 / 0
Запрос в oracle SQL для поиска по указанным параметрам и не по всем заданным параметрам
    #39965977
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lev5137,

Я не уверен, null = null сработает, поэтому сделал именно замену на пустую строку. Она точно сработает через '='. Параметр тоже должен быть не null. В принципе можно делать nvl(:param, '')
...
Рейтинг: 0 / 0
Запрос в oracle SQL для поиска по указанным параметрам и не по всем заданным параметрам
    #39965978
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lev5137,

И PHONE_NUMBER должен быть varchar по идее из-за всяких там +7. Если он number, то надо nvl(pd.phone_number, 0) = nvl(:phone, 0), потому что null не сравнится.
Код: sql
1.
2.
3.
SELECT count(1) FROM dual WHERE NULL = null

-> 0
...
Рейтинг: 0 / 0
Запрос в oracle SQL для поиска по указанным параметрам и не по всем заданным параметрам
    #39965988
exciter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
crutchmaster
Lev5137,

Я не уверен, null = null сработает, поэтому сделал именно замену на пустую строку. Она точно сработает через '='. Параметр тоже должен быть не null. В принципе можно делать nvl(:param, '')


Вы уверены, что пустая строка "сработает"?

Какой результат у вас возвращает этот запрос?
Код: plsql
1.
SELECT count(1) FROM dual WHERE '' = ''
...
Рейтинг: 0 / 0
Запрос в oracle SQL для поиска по указанным параметрам и не по всем заданным параметрам
    #39965990
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exciter,

0. Ха. А говорят, что яваскрипт наркомовский. Надо прочерк какой-то значит.
...
Рейтинг: 0 / 0
Запрос в oracle SQL для поиска по указанным параметрам и не по всем заданным параметрам
    #39966129
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
А говорят, что яваскрипт наркомовский.

А еще говорят, что прежде чем садиться за управление сложным агрегатом и тем более обучать коллег - следует хотя бы ознакомиться с инструкцией. В частности - в списке отклонений oracle rdbms от стандарта ANSI есть и отождествление пустой строки с null.

Ну и для общего расширения кругозора:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SQL> SELECT count(1) FROM dual WHERE NULL = null;
 
  COUNT(1)
----------
         0
 
SQL> SELECT count(1) FROM dual WHERE LNNVL(NULL <> null);
 
  COUNT(1)
----------
         1
 
SQL> 
...
Рейтинг: 0 / 0
Запрос в oracle SQL для поиска по указанным параметрам и не по всем заданным параметрам
    #39966317
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous,

Ладно, ладно. Я лоханулся. Подколоть уже нельзя.
...
Рейтинг: 0 / 0
Запрос в oracle SQL для поиска по указанным параметрам и не по всем заданным параметрам
    #39966347
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Подколоть" и "лоханулся" не должны встречаться в одном предложении
...
Рейтинг: 0 / 0
Запрос в oracle SQL для поиска по указанным параметрам и не по всем заданным параметрам
    #39966377
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov,

лоханулся подкалывая

.....
stax
...
Рейтинг: 0 / 0
Запрос в oracle SQL для поиска по указанным параметрам и не по всем заданным параметрам
    #39966384
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov,

Ну а чо? Некоторые вон носятся с методичкой, где у них undefined != null, null != false, '' == false и 0 == false. Правда я так же всегда отвечаю.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Запрос в oracle SQL для поиска по указанным параметрам и не по всем заданным параметрам
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]