powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Исключение подзапроса из выборки
16 сообщений из 16, страница 1 из 1
Исключение подзапроса из выборки
    #39856956
TheMultiFive
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день. Ткните носом(пытался сам найти на форуме, но не нашел).
Вопрос следующего характера:
Есть 2 таблицы: product и rev_product(таблицы связаны между собой по полю id_product). В product хранятся уникальные товары с ключевым полем id_product, в таблице rev_product(ключевое поле id_rev) хранятся результаты проверок документов по продуктам из product. Т.е. мы имеем ситуацию при которой в имеется товар в таблице product, а в таблице rev_product имеется несколько проверок, успешные/не успешные(данное значение записывается в поле result).
Из этого получается следующий вопрос:Как вытащить продукты из таблицы product, по которым в таблице rev_product были только успешные проверки(т.е. по товары отсутствует не успешные проверки вообще).
Заранее спасибо за ответы на глупый вопрос)
...
Рейтинг: 0 / 0
Исключение подзапроса из выборки
    #39856960
Посетитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TheMultiFiveДобрый день. Ткните носом(пытался сам найти на форуме, но не нашел).
Вопрос следующего характера:
Есть 2 таблицы: product и rev_product(таблицы связаны между собой по полю id_product). В product хранятся уникальные товары с ключевым полем id_product, в таблице rev_product(ключевое поле id_rev) хранятся результаты проверок документов по продуктам из product. Т.е. мы имеем ситуацию при которой в имеется товар в таблице product, а в таблице rev_product имеется несколько проверок, успешные/не успешные(данное значение записывается в поле result).
Из этого получается следующий вопрос:Как вытащить продукты из таблицы product, по которым в таблице rev_product были только успешные проверки(т.е. по товары отсутствует не успешные проверки вообще).
Заранее спасибо за ответы на глупый вопрос)

вообще "были только успешные проверки" и "отсутствует не успешные проверки вообще" - совсем не одно и то же.
...
Рейтинг: 0 / 0
Исключение подзапроса из выборки
    #39856962
alex-ls
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посетительвообще "были только успешные проверки" и "отсутствует не успешные проверки вообще" - совсем не одно и то же.
ну да могло вообще не быть покупок
...
Рейтинг: 0 / 0
Исключение подзапроса из выборки
    #39856967
TheMultiFive
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Посетитель,добрый день.
Я имею ввиду следующее: По указанному продукту есть в любом случае записи проверок(при этом неоднократные), я хочу именно выгрузить те продукты, по которым были только успешные проверки(т.е. записей у указанного продукта из таблицы product отсутствует записи о том, что проверка проведена не успешно в таблице rev_product)
...
Рейтинг: 0 / 0
Исключение подзапроса из выборки
    #39856971
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TheMultiFiveтолько успешные проверки ... отсутствует записи о том, что проверка проведена не успешноНезачем упорствовать в непонимании вопроса. Определись уже - либо то, либо другое.
...
Рейтинг: 0 / 0
Исключение подзапроса из выборки
    #39856977
TheMultiFive
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-2-TheMultiFiveтолько успешные проверки ... отсутствует записи о том, что проверка проведена не успешноНезачем упорствовать в непонимании вопроса. Определись уже - либо то, либо другое.
Должно быть я просто не так выразился во второй части сообщения, я как раз и имею ввиду, что необходимы лишь те товары, по которым только успешные проверки.
...
Рейтинг: 0 / 0
Исключение подзапроса из выборки
    #39856979
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TheMultiFiveтолько успешныеhaving max/min
...
Рейтинг: 0 / 0
Исключение подзапроса из выборки
    #39856985
TheMultiFive
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-2-TheMultiFiveтолько успешныеhaving max/min
Возможно, я вас не так понял, но уточню: В поле result записывается текстовое значение, "Проверка успешна" или "Проверка не успешна". having к этому полю не применить.
...
Рейтинг: 0 / 0
Исключение подзапроса из выборки
    #39856993
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TheMultiFive,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
SQL> ed
Wrote file afiedt.buf

  1  with product (id_product) as(
  2  select 1 from dual union all
  3  select 2 from dual union all
  4  select 3 from dual
  5  ),
  6  rev_product(id_rev,ref_product,result) as(
  7  select 10,1,'Проверка не успешна' from dual union all
  8  select 11,1,'Проверка успешна' from dual union all
  9  select 12,2,'Проверка успешна' from dual)
 10  select id_product from product p,rev_product r
 11  where ref_product=id_product
 12  group by id_product
 13* having count(nullif(result,'Проверка успешна'))=0 and count(nullif(result,'Проверка не успешна'))>0
SQL> /

ID_PRODUCT
----------
         2



ps
+
select where exists ('Проверка успешна') and not exists('Проверка не успешна')
.....
stax
...
Рейтинг: 0 / 0
Исключение подзапроса из выборки
    #39856995
MazoHist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TheMultiFiveВозможно, я вас не так понял, но уточню: В поле result записывается текстовое значение, "Проверка успешна" или "Проверка не успешна". having к этому полю не применить.
еще как применить
а если не хотите HAVING то NOT EXISTS (неуспешно) and EXISTS (успешно)
...
Рейтинг: 0 / 0
Исключение подзапроса из выборки
    #39856996
MazoHist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax,

having min(result)= 'Проверка успешна'
...
Рейтинг: 0 / 0
Исключение подзапроса из выборки
    #39856997
Да ну
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TheMultiFive,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
with 
product (id_product,name_product) as (
 select 1, 'Банан' from dual union all
 select 2, 'Груша' from dual union all
 select 3, 'Арбуз' from dual union all
 select 4, 'Вишня' from dual 
),
product_rev(id_product,success) as (
 select 1,'Y' from dual union all
 select 2,'N' from dual union all
 select 3,'Y' from dual union all
 select 3,'N' from dual union all
 select 4,'Y' from dual union all
 select 4,'Y' from dual 
)
select * 
from product p
where     exists (select * from product_rev pr where pr.id_product=p.id_product and pr.success='Y')
  and not exists (select * from product_rev pr where pr.id_product=p.id_product and pr.success='N')

С заходом от product_rev
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select * 
from (
  select id_product 
    from product_rev 
  group by id_product 
  having count(*)>0
     and count(case when success='N' then 1 end) = 0
) q
join product p using (id_product)
...
Рейтинг: 0 / 0
Исключение подзапроса из выборки
    #39856998
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MazoHistStax,

having min(result)= 'Проверка успешна'
ето вариант -2-

....
stax
...
Рейтинг: 0 / 0
Исключение подзапроса из выборки
    #39857006
TheMultiFive
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да нуTheMultiFive,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
with 
product (id_product,name_product) as (
 select 1, 'Банан' from dual union all
 select 2, 'Груша' from dual union all
 select 3, 'Арбуз' from dual union all
 select 4, 'Вишня' from dual 
),
product_rev(id_product,success) as (
 select 1,'Y' from dual union all
 select 2,'N' from dual union all
 select 3,'Y' from dual union all
 select 3,'N' from dual union all
 select 4,'Y' from dual union all
 select 4,'Y' from dual 
)
select * 
from product p
where     exists (select * from product_rev pr where pr.id_product=p.id_product and pr.success='Y')
  and not exists (select * from product_rev pr where pr.id_product=p.id_product and pr.success='N')

С заходом от product_rev
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select * 
from (
  select id_product 
    from product_rev 
  group by id_product 
  having count(*)>0
     and count(case when success='N' then 1 end) = 0
) q
join product p using (id_product)


Большое спасибо за помощь)
...
Рейтинг: 0 / 0
Исключение подзапроса из выборки
    #39857008
TheMultiFive
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
StaxTheMultiFive,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
SQL> ed
Wrote file afiedt.buf

  1  with product (id_product) as(
  2  select 1 from dual union all
  3  select 2 from dual union all
  4  select 3 from dual
  5  ),
  6  rev_product(id_rev,ref_product,result) as(
  7  select 10,1,'Проверка не успешна' from dual union all
  8  select 11,1,'Проверка успешна' from dual union all
  9  select 12,2,'Проверка успешна' from dual)
 10  select id_product from product p,rev_product r
 11  where ref_product=id_product
 12  group by id_product
 13* having count(nullif(result,'Проверка успешна'))=0 and count(nullif(result,'Проверка не успешна'))>0
SQL> /

ID_PRODUCT
----------
         2



ps
+
select where exists ('Проверка успешна') and not exists('Проверка не успешна')
.....
stax
Большое спасибо за помощь)
...
Рейтинг: 0 / 0
Исключение подзапроса из выборки
    #39857009
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да ну,

group by id_product
having count(*)>0 всегда >0 (лишнее)

ps
NULLIF /CASE WHEN expr1 = expr 2 THEN NULL ELSE expr1 END


.....
stax
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Исключение подзапроса из выборки
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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