Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / подскажите как исправить запрос / 9 сообщений из 9, страница 1 из 1
02.06.2020, 14:50
    #39965356
Oer
Oer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
подскажите как исправить запрос
Здравствуйте, подскажите пожалуйста, как можно исправить запрос
нужно вывести: Список постов, содержащих все указанные теги

мой запрос:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select *
from STUD."Post" p
where exists (select *
            from STUD."Tag" t inner join STUD."Tag_post" tp
            on tp.id_tag = t.id_tag
            where p.id_post = tp.id_post
            and t.tag_name = 'готовка')
and exists (select *
            from STUD."Tag" t inner join STUD."Tag_post" tp
            on tp.id_tag = t.id_tag
            where p.id_post = tp.id_post
            and t.tag_name = 'cooking'



комментарий преподавателя: неверно, а если у вас будет 10 тэгов?
не представляю как еще это можно реализовать
...
Рейтинг: 0 / 0
02.06.2020, 15:15
    #39965362
dmdmdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
подскажите как исправить запрос
in
...
Рейтинг: 0 / 0
02.06.2020, 15:33
    #39965371
Oer
Oer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
подскажите как исправить запрос
dmdmdm,

Код: plsql
1.
and t.tag_name  in ( 'готовка', 'cooking', 'фильм'));


выводит мне посты, которые содержат хотя бы один из перечисленных, а мне нужно выбрать объекты, у которых есть теги «tag1», «tag2», «tag3». При этом не один из трёх, а все три.
...
Рейтинг: 0 / 0
02.06.2020, 16:12
    #39965380
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
подскажите как исправить запрос
Oer,

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

  1  with Post(id) as (
  2    select 1 from dual union all
  3    select 2 from dual
  4  )
  5  ,Tag_post(id_tag,tag_name) as (
  6    select 1,'готовка' from dual union all
  7    select 1,'cooking' from dual union all
  8    select 2,'Oer' from dual union all
  9    select 2,'cooking' from dual
 10  )
 11  select id
 12   from Post p,Tag_post tp
 13   where p.id=tp.id_tag and tp.tag_name  in ( 'готовка', 'cooking')
 14   group by id
 15*  having count(distinct tp.tag_name)=2
SQL> /

        ID
----------
         1



.....
stax
...
Рейтинг: 0 / 0
02.06.2020, 16:15
    #39965381
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
подскажите как исправить запрос
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
with t as (
           select  tp.id_post,
                   sum(distinct case t.tag_name
                                  when 'готовка' then 1
                                  when 'cooking' then 2
                                  when 'фильм' then 4
                                end
                      ) flag
            from  STUD."Tag" t,
                  STUD."Tag_post" tp
            where tp.id_tag = t.id_tag
              and p.id_post = tp.id_post
            group by tp.id_post
          )                  
select  *
  from  STUD."Post" p,
        t
  where p.id_post = t.id_post
    and t.flag = 7
/



SY.
...
Рейтинг: 0 / 0
02.06.2020, 16:50
    #39965391
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
подскажите как исправить запрос
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
with posts(id_post, txt) as (select 1, 'искомый пост: готовка, cooking, фильм' 
from dual union all select 2, 'тоже годен: готовка, cooking, фильм, лишний тег'
from dual union all select 3, 'негодный пост: cooking, фильм, без готовки'
from dual)
, tags(id_tag, tag_name) as (select 1, 'готовка'
from dual union all select 2, 'cooking'
from dual union all select 3, 'фильм'
from dual union all select 4, 'лишний'
from dual
)
, tags_posts(id_tag, id_post) as (select 1, 1
from dual union all select 2, 1
from dual union all select 3, 1
from dual union all select 1, 2
from dual union all select 2, 2
from dual union all select 3, 2
from dual union all select 4, 2
from dual union all select 2, 3
from dual union all select 3, 3
from dual
)


Код: sql
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.
select * 
  from posts p
  where not exists( 
          select null 
            from lateral(select p.id_post, id_tag from tags where tag_name in ( 'готовка', 'cooking', 'фильм')
                          minus
                         select p.id_post, id_tag from tags_posts where id_post = p.id_post)
         )
;     

select * 
  from posts p
 where (select cast(collect(id_tag) as sys.ORA_MINING_NUMBER_NT) 
          from tags 
         where tag_name in ( 'готовка', 'cooking', 'фильм')
       )submultiset of
       (select cast(collect(id_tag) as sys.ORA_MINING_NUMBER_NT) 
          from tags_posts 
         where id_post = p.id_post)
;

select * from posts p
where (select count(distinct t.id_tag) 
           from tags t
          where t.tag_name in ( 'готовка', 'cooking', 'фильм')
         )=(select count(distinct t.id_tag) 
           from tags t
              , tags_posts tp 
          where t.id_tag=tp.id_tag 
            and tp.id_post=p.id_post 
            and t.tag_name in ( 'готовка', 'cooking', 'фильм')
         )
;
...
Рейтинг: 0 / 0
02.06.2020, 16:51
    #39965392
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
подскажите как исправить запрос
Дальше должны быть по идее примеры на модельке, xmltable, функции и CONTAINS
...
Рейтинг: 0 / 0
02.06.2020, 16:59
    #39965393
oragraf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
подскажите как исправить запрос
С каждым ответом KISS нарушается все сильнее и сильнее
...
Рейтинг: 0 / 0
02.06.2020, 17:02
    #39965395
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
подскажите как исправить запрос
oragraf
С каждым ответом KISS нарушается все сильнее и сильнее

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


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