Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Выборка исключенного под запросом значения / 24 сообщений из 24, страница 1 из 1
04.05.2017, 15:17
    #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
04.05.2017, 15:29
    #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
04.05.2017, 15:33
    #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
04.05.2017, 15:45
    #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
04.05.2017, 16:21
    #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
04.05.2017, 16:22
    #39448848
rf_mail
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка исключенного под запросом значения
Reflector,
Уважаемый.

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

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

Если в таблице t1 две записи, у них явно разный t1.serial. В таблице t2 не может быть 2 записи с t2.nls одинаковым.
Если в таблице t2 присутствует запись, которая попадает в t1,такую следует исключить.
...
Рейтинг: 0 / 0
04.05.2017, 16:37
    #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
04.05.2017, 16:39
    #39448861
MaximaXXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка исключенного под запросом значения
Reflector,

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


Minus Вам не подойдет из-за разных возвращаемых колонок
...
Рейтинг: 0 / 0
04.05.2017, 16:41
    #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
04.05.2017, 16:48
    #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
04.05.2017, 16:49
    #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
04.05.2017, 16:50
    #39448869
Reflector
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка исключенного под запросом значения
Dshedoo,
Тут вы совершенно правы! Это ни к чему не привело, спасибо)
...
Рейтинг: 0 / 0
04.05.2017, 16:54
    #39448873
Reflector
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка исключенного под запросом значения
MaximaXXL,

К сожалению, там проверяются совсем отличные условия. в t1 ищу оборудование, которое у клиента(type=1, к примеру) и хочу в t2 проверить, был ли по нему акт(type=4).
...
Рейтинг: 0 / 0
04.05.2017, 17:05
    #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
04.05.2017, 17:47
    #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
04.05.2017, 17:52
    #39448921
MaximaXXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка исключенного под запросом значения
Reflector,

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

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

Насчет ярко выраженных НЛС:)
в t1 это 'НЛС 121212121212'. Но я их конверчу.
в t2 это '121212121212'. Они совпадают после конверта, инфа 100:)
...
Рейтинг: 0 / 0
05.05.2017, 09:07
    #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
05.05.2017, 10:10
    #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
05.05.2017, 11:02
    #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
05.05.2017, 11:29
    #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
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Выборка исключенного под запросом значения / 24 сообщений из 24, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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