powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Выборка исключенного под запросом значения
24 сообщений из 24, страница 1 из 1
Выборка исключенного под запросом значения
    #39448772
Reflector
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, вопрос следующий. Наверняка где-то освещалось, но не нашел.
Есть Таблица, которая содержит параметры
Код: plsql
1.
2.
select t1.nls,t1.serial
from table1


И есть вторая таблица, в которую помещены личные счета, являющиеся закрытыми.
Код: plsql
1.
select t2.nls from table2


НЛС из таблицы 2 присутствует так же в общей таблице table1. Как сделать так, чтобы была проверка на случай попадания в таблицу2?
То есть если я имею для ячейки t1.serial две записи t1.nls,хочется на выходе увидеть только ту, которая не попадет в таблицу2.
Так же если в таблице2 нет данных, вывести просто значение из таблицы1.
Заранее спасибо)
...
Рейтинг: 0 / 0
Выборка исключенного под запросом значения
    #39448789
Dshedoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Reflector,

Код: plsql
1.
2.
3.
select t1.nls,t1.serial
from table1 t1 left join tabl2 t2 on t1.nls = t2.nls
where t2.nls is null
...
Рейтинг: 0 / 0
Выборка исключенного под запросом значения
    #39448799
Dshedoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dshedoo,

Код: plsql
1.
2.
3.
select t1.nls,t1.serial
from table1 t1
where not exists (select t2.nls from tabl2 where t1.nls = t2.nsl)
...
Рейтинг: 0 / 0
Выборка исключенного под запросом значения
    #39448817
Reflector
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это не поможет, вот запрос, который выбирает НЛС, по которым был возврат.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
select c5.client_code from
(
select
regexp_replace(RMS_.ACCOUNT_NAME(V_ACCOUNT_ID => a1.source_id), '[^[:digit:]]') Vozvrat1
from resource_identity ri1,
     RMS_.Resource_Unit ru1,
     RMS_.ACT_ENTRY_RESOURCE aer1,
     RMS_.ACT a1,
     RMS_.Transfer_Type t1
where ru1.id=ri1.id
and aer1.resource_unit_id=ru1.id
and a1.id=aer1.act_id
and a1.transfer_type_id=t1.id
and a1.id not in 
(
select a2.id
from RMS_.Act a2
where a2.transfer_type_id not in (4,10)
)
and ri.serial_number='Q91I1E4007518'
) sos
left join client c5 on c5.client_code=sos.Vozvrat1


Результатпустое поле
По данному оборудованию не было возврата

А вот запрос, который выдает всю инфу по оборудованию.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
select RMS_.ACT_NUMBER(V_CREATION_DATE => a.creation_date,V_NUMBER_WITHIN_DAY => a.number_within_day) Номер_акта,
       t.name Тип_акта,
       a.actual_send_date Дата_передачи,
       regexp_replace(RMS_.ACCOUNT_NAME(V_ACCOUNT_ID => a.destination_id), '[^[:digit:]]') NLS_,
       rtv.category_name Тип_оборудования,
       rt.code Номенклатура,
       rt.name Наименование_оборудования,
       ri.serial_number Serial_MY,
       tt.name Условия_передачи,
       dt.name Документ_основание,
       a.doc_number as "№",
       a.doc_date as "От"
from RMS_.ACT a,
     RMS_.ACT_ENTRY_RESOURCE aer,
     RMS_.Transfer_Type t,
     RMS_.Resource_Unit ru,
     Resource_Identity ri,
     RMS_.Transfer_Terms tt,
     resource_type rt,
     resource_type_vl rtv,
     RMS_.Document_Type dt
where a.id=aer.act_id
and a.transfer_type_id=t.id
and aer.resource_unit_id=ru.id
and ru.id=ri.id
and aer.transfer_terms_id=tt.id(+)
and ri.resource_type_id=rt.id
and rtv.id=rt.id
and a.doc_type_id=dt.id(+)
and ri.serial_number='Q91I1E4007518'


Выдача клиенту229010015824
Как соединить таблицы так, чтобы не потерять проверку и в тот же момент получить записи, для которых первый запрос возвращает 0
...
Рейтинг: 0 / 0
Выборка исключенного под запросом значения
    #39448847
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ReflectorДобрый день, вопрос следующий. Наверняка где-то освещалось, но не нашел.
Есть Таблица, которая содержит параметры
Код: plsql
1.
2.
select t1.nls,t1.serial
from table1


И есть вторая таблица, в которую помещены личные счета, являющиеся закрытыми.
Код: plsql
1.
select t2.nls from table2


НЛС из таблицы 2 присутствует так же в общей таблице table1. Как сделать так, чтобы была проверка на случай попадания в таблицу2?
То есть если я имею для ячейки t1.serial две записи t1.nls,хочется на выходе увидеть только ту, которая не попадет в таблицу2.
Так же если в таблице2 нет данных, вывести просто значение из таблицы1.
Заранее спасибо)

а если в таблице t1 2 записи и в таблице t2 2 записи с t1.nls = t2.nls что надо вывести 1 запись или 2?
...
Рейтинг: 0 / 0
Выборка исключенного под запросом значения
    #39448848
Фотография rf_mail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Reflector,
Уважаемый.

вам нужно использовать table1 Minus table2

а результат вставить как подзапрос в вашу выборку.
...
Рейтинг: 0 / 0
Выборка исключенного под запросом значения
    #39448852
Reflector
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MaximaXXL,

Если в таблице t1 две записи, у них явно разный t1.serial. В таблице t2 не может быть 2 записи с t2.nls одинаковым.
Если в таблице t2 присутствует запись, которая попадает в t1,такую следует исключить.
...
Рейтинг: 0 / 0
Выборка исключенного под запросом значения
    #39448860
Dshedoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Reflector,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
...
     RMS_.ACT a1,
...
and a1.id not in 
(
select a2.id
from RMS_.Act a2
where a2.transfer_type_id not in (4,10)
)


Мне этот кусок вообще не понятен.
Почему не заменить его на
Код: plsql
1.
and a1.transfer_type_id in (4,10)

?
...
Рейтинг: 0 / 0
Выборка исключенного под запросом значения
    #39448861
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Reflector,

тогда пользуйте один из предложенных Dshedoo вариантов как самый быстрый (мне например лень разбираться =) )


Minus Вам не подойдет из-за разных возвращаемых колонок
...
Рейтинг: 0 / 0
Выборка исключенного под запросом значения
    #39448863
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DshedooReflector,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
...
     RMS_.ACT a1,
...
and a1.id not in 
(
select a2.id
from RMS_.Act a2
where a2.transfer_type_id not in (4,10)
)


Мне этот кусок вообще не понятен.
Почему не заменить его на
Код: plsql
1.
and a1.transfer_type_id in (4,10)

?

потому что not in - переводят как КРОМЕ
а in - переводят как ТОЛЬКО
...
Рейтинг: 0 / 0
Выборка исключенного под запросом значения
    #39448866
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dshedoo,

Сори - недосмотрел ...

тогда вместо
Код: plsql
1.
2.
3.
4.
5.
6.
and a1.id not in 
(
select a2.id
from RMS_.Act a2
where a2.transfer_type_id not in (4,10)
)



я бы предложил тогда t1.id in (4,10) - но тут данные видеть надо
...
Рейтинг: 0 / 0
Выборка исключенного под запросом значения
    #39448868
Dshedoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximaXXL,

Согласен, с нулом может быть косяк (хотя какой нулл в типе).

Код: plsql
1.
and (a1.transfer_type_id in (4,10) or a1.transfer_type_id is null)


хотя можно и извратиться 1 условием:
Код: plsql
1.
and a1.transfer_type_id||'qwer' in ('4qwer','10qwer')



В смысле, зачем писать 2 раза минус, когда можно 1 раз плюс?
...
Рейтинг: 0 / 0
Выборка исключенного под запросом значения
    #39448869
Reflector
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dshedoo,
Тут вы совершенно правы! Это ни к чему не привело, спасибо)
...
Рейтинг: 0 / 0
Выборка исключенного под запросом значения
    #39448873
Reflector
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MaximaXXL,

К сожалению, там проверяются совсем отличные условия. в t1 ищу оборудование, которое у клиента(type=1, к примеру) и хочу в t2 проверить, был ли по нему акт(type=4).
...
Рейтинг: 0 / 0
Выборка исключенного под запросом значения
    #39448886
Reflector
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Переписал так, как указывал Dshedoo. Все равно не работает, не пойму, почему. Должно выдать 1 строку, получаю 0 rows.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
select * from
(select my.*,c.object_id CLient_id
from
(select RMS_.ACT_NUMBER(V_CREATION_DATE => a.creation_date,V_NUMBER_WITHIN_DAY => a.number_within_day) Номер_акта,
       t.name Тип_акта,
       a.actual_send_date Дата_передачи,
       regexp_replace(RMS_.ACCOUNT_NAME(V_ACCOUNT_ID => a.destination_id), '[^[:digit:]]') NLS_,
       rtv.category_name Тип_оборудования,
       rt.code Номенклатура,
       rt.name Наименование_оборудования,
       ri.serial_number Серийный_номер,
       tt.name Условия_передачи,
       dt.name Документ_основание,
       a.doc_number as "№",
       a.doc_date as "От"
from RMS_.ACT a,
     RMS_.ACT_ENTRY_RESOURCE aer,
     RMS_.Transfer_Type t,
     RMS_.Resource_Unit ru,
     Resource_Identity ri,
     RMS_.Transfer_Terms tt,
     resource_type rt,
     resource_type_vl rtv,
     RMS_.Document_Type dt
where a.id=aer.act_id
and a.transfer_type_id=t.id
and aer.resource_unit_id=ru.id
and ru.id=ri.id
and aer.transfer_terms_id=tt.id(+)
and ri.resource_type_id=rt.id
and rtv.id=rt.id
and a.doc_type_id=dt.id(+)
and ri.serial_number='Q91I1E4007518'
and (a.transfer_type_id=3 or a.transfer_type_id=13 or a.transfer_type_id=14)
) my
left join client c on my.NLS_=c.client_code) my1
where not exists 
(
select c5.client_code from
(
select
regexp_replace(RMS_.ACCOUNT_NAME(V_ACCOUNT_ID => a1.source_id), '[^[:digit:]]') Vozvrat1
from resource_identity ri1,
     RMS_.Resource_Unit ru1,
     RMS_.ACT_ENTRY_RESOURCE aer1,
     RMS_.ACT a1,
     RMS_.Transfer_Type t1
where ru1.id=ri1.id
and aer1.resource_unit_id=ru1.id
and a1.id=aer1.act_id
and a1.transfer_type_id=t1.id
and a1.transfer_type_id in (4,10)
) sos
left join client c5 on c5.client_code=sos.Vozvrat1)


Кто-нибудь может указать ошибку?
...
Рейтинг: 0 / 0
Выборка исключенного под запросом значения
    #39448917
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DshedooReflector,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
...
     RMS_.ACT a1,
...
and a1.id not in 
(
select a2.id
from RMS_.Act a2
where a2.transfer_type_id not in (4,10)
)


Мне этот кусок вообще не понятен.
Почему не заменить его на
Код: plsql
1.
and a1.transfer_type_id in (4,10)

?

еще раз объсняю, надо СМОТРЕТЬ в ДАННЫЕ. Если поле RMS_.Act.id - primary key то переписать на Ваш вариант можно
если НЕТ, а похоже что нет, то если перевести на русский звучит
1. "не рассматривать акты в которых не было типа 4 и 10" (Например просрочка)
2. "рассматривать строки с типом 4 и 10" (т.е. для других типов актов условие применяться не будет )
...
Рейтинг: 0 / 0
Выборка исключенного под запросом значения
    #39448921
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Reflector,

А Давай ты напишешь что есть table1 и table2 c ярко выраженной nls в обоих
...
Рейтинг: 0 / 0
Выборка исключенного под запросом значения
    #39448999
Reflector
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MaximaXXL,

Поле ACT_Id-primary.
Вопрос в том, как сделать так, чтобы был вывод всего из table1, но при это в учет не попало то, что попало в table2.
Во втором запросе, очевидно, Act_id primary не выступает. Но, как мне кажется, это там и не нужно. В table2 достаточно увидеть t2.nls,дабы потом его сравнить со значениями table1. Если есть в t2,отбросить их. Если нет-вывести.
Я понимаю, что задача тупая и решается, возможно, на пальцах,но никак допереть не могу:)
...
Рейтинг: 0 / 0
Выборка исключенного под запросом значения
    #39449002
Reflector
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MaximaXXL,

А что если сделать left join table 2 t2 on t2.nls=t1.nls
where t2.nls in
(
select выбора актов возврата
)
OR t2.nls is null ?
Возможности проверить нет, пока что:( Завтра проверю теорию
...
Рейтинг: 0 / 0
Выборка исключенного под запросом значения
    #39449011
Reflector
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MaximaXXL,

Насчет ярко выраженных НЛС:)
в t1 это 'НЛС 121212121212'. Но я их конверчу.
в t2 это '121212121212'. Они совпадают после конверта, инфа 100:)
...
Рейтинг: 0 / 0
Выборка исключенного под запросом значения
    #39449125
Dshedoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Reflector,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
where not exists 
(
select c5.client_code from
(
select
regexp_replace(RMS_.ACCOUNT_NAME(V_ACCOUNT_ID => a1.source_id), '[^[:digit:]]') Vozvrat1
from resource_identity ri1,
     RMS_.Resource_Unit ru1,
     RMS_.ACT_ENTRY_RESOURCE aer1,
     RMS_.ACT a1,
     RMS_.Transfer_Type t1
where ru1.id=ri1.id
and aer1.resource_unit_id=ru1.id
and a1.id=aer1.act_id
and a1.transfer_type_id=t1.id
and a1.transfer_type_id in (4,10)
) sos
left join client c5 on c5.client_code=sos.Vozvrat1)


У вас экзист никак не связан с вышестоящим запросом.
Более того, если экзист вернёт null, то с чем бы вы его не сравнивали, всегда будет FALSE.

Нужно слегка переписать 1ый запрос и привязать его ко 2ому.
...
Рейтинг: 0 / 0
Выборка исключенного под запросом значения
    #39449196
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Reflector,

Я так понял что table1 это
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
select RMS_.ACT_NUMBER(V_CREATION_DATE => a.creation_date,V_NUMBER_WITHIN_DAY => a.number_within_day) Номер_акта,
       t.name Тип_акта,
       a.actual_send_date Дата_передачи,
       regexp_replace(RMS_.ACCOUNT_NAME(V_ACCOUNT_ID => a.destination_id), '[^[:digit:]]') NLS_,
       rtv.category_name Тип_оборудования,
       rt.code Номенклатура,
       rt.name Наименование_оборудования,
       ri.serial_number Serial_MY,
       tt.name Условия_передачи,
       dt.name Документ_основание,
       a.doc_number as "№",
       a.doc_date as "От"
from RMS_.ACT a,
     RMS_.ACT_ENTRY_RESOURCE aer,
     RMS_.Transfer_Type t,
     RMS_.Resource_Unit ru,
     Resource_Identity ri,
     RMS_.Transfer_Terms tt,
     resource_type rt,
     resource_type_vl rtv,
     RMS_.Document_Type dt
where a.id=aer.act_id
and a.transfer_type_id=t.id
and aer.resource_unit_id=ru.id
and ru.id=ri.id
and aer.transfer_terms_id=tt.id(+)
and ri.resource_type_id=rt.id
and rtv.id=rt.id
and a.doc_type_id=dt.id(+)
and ri.serial_number='Q91I1E4007518'



где есть поле NLS_ - допустим это и было t1.nls

Но вот что вы считаете table2 и где у нее t2.nls - я не понял
...
Рейтинг: 0 / 0
Выборка исключенного под запросом значения
    #39449240
Reflector
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MaximaXXL,

Соединял exist я с помощью
Код: plsql
1.
left join client c on my.NLS_=c.client_code) my1

. Или этого не достаточно.
Client_code-это и есть НЛС. В нижней части идет его выборка, чтобы он не присутствовал в пуле.
Код: plsql
1.
2.
left join client c on my.NLS_=c.client_code
where c.client_code not in(t2)
...
Рейтинг: 0 / 0
Выборка исключенного под запросом значения
    #39449263
Reflector
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ReflectorMaximaXXL,

А что если сделать left join table 2 t2 on t2.nls=t1.nls
where t2.nls in
(
select выбора актов возврата
)
OR t2.nls is null ?
Возможности проверить нет, пока что:( Завтра проверю теорию

Все, данный вариант сработал. Пересобрал конструкцию t2,пару связок убрали добавил,и все:) Спасибо всем, в частности Dshedoo и, конечно же, MaximaXXL!!!:)
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Выборка исключенного под запросом значения
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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