Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Не могу написать запрос c exists / 19 сообщений из 19, страница 1 из 1
21.06.2017, 13:28
    #39475436
x17.mstu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу написать запрос c exists
customer_id order_id
1 1 1
1 2 0
1 3 1
2 1 0
2 2 0
2 3 0
3 1 1
3 2 1
3 3 1
4 1 0
...
Рейтинг: 0 / 0
21.06.2017, 13:31
    #39475437
x17.mstu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу написать запрос c exists
Есть таблица emiss_report.Persons
Как написать используя exists.
Вывести только тех cutomer_id, у которых встречается только status=0 (должно быть customer_id с 2 и 4)

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
customer_id order_id status
1	1	1 
1	2	0
1	3	1
2	1	0
2	2	0
2	3	0
3	1	1
3	2	1
3	3	1
4	1	0
...
Рейтинг: 0 / 0
21.06.2017, 13:32
    #39475439
Не могу написать запрос c exists
x17.mstu,

не можешь "С" - напиши "БЕЗ"

или покажи - как пробовал...
...
Рейтинг: 0 / 0
21.06.2017, 13:36
    #39475445
stax..
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу написать запрос c exists
x17.mstu,
кто с c exists?
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
  1* select * from emp e where exists (select 1 from emp x where x.deptno=e.deptno and x.job='PRESIDENT')
SQL> /

     EMPNO ENAME      JOB              MGR HIREDATE        SAL       COMM     DEPTNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
      7782 CLARK      MANAGER         7839 09.06.81       2450                    10
      7839 KING       PRESIDENT            17.11.81       5000                    10
      7934 MILLER     CLERK           7782 23.01.82       1300                    10



....
stax
...
Рейтинг: 0 / 0
21.06.2017, 13:39
    #39475450
x17.mstu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу написать запрос c exists
Добрый Э - Эх,
select * from emiss_report.Persons per1
where exists
(
select status, customerid, count(distinct status) from emiss_report.Persons per2
where status='0'
and per1.customerid=per2.customerid and per1.orderid=per2.orderid
group by customerid, status
)
...
Рейтинг: 0 / 0
21.06.2017, 13:44
    #39475458
stax..
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу написать запрос c exists
x17.mstu,

Код: 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.
SQL> ed
Wrote file afiedt.buf

  1  with t (customer_id, order_id, status) as(
  2  select 1,  1,      1 from dual union all
  3  select 1,  2,      0 from dual union all
  4  select 1,  3,      1 from dual union all
  5  select 2,  1,      0 from dual union all
  6  select 2,  2,      0 from dual union all
  7  select 2,  3,      0 from dual union all
  8  select 3,  1,      1 from dual union all
  9  select 3,  2,      1 from dual union all
 10  select 3,  3,      1 from dual union all
 11  select 4,  1,      0 from dual )
 12  select distinct customer_id from t t where
 13* exists (select 1 from t x where x.customer_id=t.customer_id having count(decode(x.status,0,1))=count(*))
SQL> /

CUSTOMER_ID
-----------
          2
          4

SQL>



ps
луче через not exists
.....
stax
...
Рейтинг: 0 / 0
21.06.2017, 13:50
    #39475459
x17.mstu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу написать запрос c exists
stax..,
Вот так написал.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select * from emiss_report.Persons per1
where exists
(
select customerid from emiss_report.Persons per2
where per1.customerid=per2.customerid 
group by customerid
having count(distinct status)=1
)
and per1.status='0'
...
Рейтинг: 0 / 0
21.06.2017, 13:58
    #39475464
stax..
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу написать запрос c exists
x17.mstustax..,
Вот так написал.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select * from emiss_report.Persons per1
where exists
(
select customerid from emiss_report.Persons per2
where per1.customerid=per2.customerid 
group by customerid
having count(distinct status)=1
)
and per1.status='0'



status is not null?

ps
імхо group by customerid лишнее

....
stax
...
Рейтинг: 0 / 0
21.06.2017, 14:08
    #39475474
MaximaXXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу написать запрос c exists
stax..,
И нравиться Вам с этим exists мучатся?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
with t (customer_id, order_id, status) as(
   select 1,  1,      1 from dual union all
   select 1,  2,      0 from dual union all
   select 1,  3,      1 from dual union all
   select 2,  1,      0 from dual union all
   select 2,  2,      0 from dual union all
   select 2,  3,      0 from dual union all
   select 3,  1,      1 from dual union all
   select 3,  2,      1 from dual union all
   select 3,  3,      1 from dual union all
   select 4,  1,      0 from dual )
   
select customer_id
from t
group by customer_id
having avg(status) = 0
...
Рейтинг: 0 / 0
21.06.2017, 14:21
    #39475488
x17.mstu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу написать запрос c exists
MaximaXXL,
Задачка с собес
...
Рейтинг: 0 / 0
21.06.2017, 14:21
    #39475490
stax..
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу написать запрос c exists
MaximaXXL,
условие такое (тема) запрос с exists

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
  1  with t (customer_id, order_id, status) as(
  2     select 1,  1,      1 from dual union all
  3     select 1,  2,      0 from dual union all
  4     select 1,  3,     -1 from dual union all
  5     select 2,  1,      0 from dual union all
  6     select 2,  2,      0 from dual union all
  7     select 2,  3,      0 from dual union all
  8     select 3,  1,      1 from dual union all
  9     select 3,  2,      1 from dual union all
 10     select 3,  3,      1 from dual union all
 11     select 4,  1,      0 from dual )
 12  select customer_id
 13  from t
 14  group by customer_id
 15* having avg(status) = 0
SQL> /

CUSTOMER_ID
-----------
          1
          2
          4



юююю
stax..
...
Рейтинг: 0 / 0
21.06.2017, 14:22
    #39475491
x17.mstu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу написать запрос c exists
stax..,
Почему лишнее ?
...
Рейтинг: 0 / 0
21.06.2017, 14:23
    #39475494
x17.mstu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу написать запрос c exists
stax..,
Всегда думал что без group by having не пройдет
...
Рейтинг: 0 / 0
21.06.2017, 14:24
    #39475495
MaximaXXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу написать запрос c exists
stax..,

Я сначала думал avg(decode(status,0,1000,0)) = 1000 , но лень было писать и решил узнать зачем нужен exists
...
Рейтинг: 0 / 0
21.06.2017, 14:44
    #39475507
MaximaXXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу написать запрос c exists
x17.mstuMaximaXXL,
Задачка с собес

А так?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
with t (customer_id, order_id, status) as(
   select 1,  1,      1 from dual union all
   select 1,  2,      0 from dual union all
   select 1,  3,      1 from dual union all
   select 2,  1,      0 from dual union all
   select 2,  2,      0 from dual union all
   select 2,  3,      0 from dual union all
   select 3,  1,      1 from dual union all
   select 3,  2,      1 from dual union all
   select 3,  3,      1 from dual union all
   select 4,  1,      0 from dual )
   
select distinct customer_id
from t k
where not exists(select 1 from t where k.customer_id = t.customer_id and t.status != 0)


но не понятно есть ли null
...
Рейтинг: 0 / 0
21.06.2017, 15:08
    #39475546
stax..
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу написать запрос c exists
MaximaXXL,

not exists <> exists

.....
stax
...
Рейтинг: 0 / 0
21.06.2017, 15:15
    #39475552
MaximaXXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу написать запрос c exists
stax..MaximaXXL,

not exists <> exists

.....
stax

отчего же

instr('... not exists ...', 'exists') >0 - дает TRUE

т.о. запрос использует exists и дополнительные ключевые слова запрета на которые я не видел ;-)
...
Рейтинг: 0 / 0
21.06.2017, 15:18
    #39475555
умник.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу написать запрос c exists
MaximaXXLИ нравиться Вам с этим exists мучатся?

А Вы с русским языком завязывайте. Пишите все на SQL.
...
Рейтинг: 0 / 0
21.06.2017, 17:20
    #39475657
georgy_g
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу написать запрос c exists
заменить avg на sum. exist не нужен stax..MaximaXXL,
условие такое (тема) запрос с exists

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
  1  with t (customer_id, order_id, status) as(
  2     select 1,  1,      1 from dual union all
  3     select 1,  2,      0 from dual union all
  4     select 1,  3,     -1 from dual union all
  5     select 2,  1,      0 from dual union all
  6     select 2,  2,      0 from dual union all
  7     select 2,  3,      0 from dual union all
  8     select 3,  1,      1 from dual union all
  9     select 3,  2,      1 from dual union all
 10     select 3,  3,      1 from dual union all
 11     select 4,  1,      0 from dual )
 12  select customer_id
 13  from t
 14  group by customer_id
 15* having avg(status) = 0
SQL> /

CUSTOMER_ID
-----------
          1
          2
          4



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


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