powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / подскажите как исправить запрос
9 сообщений из 9, страница 1 из 1
подскажите как исправить запрос
    #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
подскажите как исправить запрос
    #39965362
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
in
...
Рейтинг: 0 / 0
подскажите как исправить запрос
    #39965371
Oer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Oer
Гость
dmdmdm,

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


выводит мне посты, которые содержат хотя бы один из перечисленных, а мне нужно выбрать объекты, у которых есть теги «tag1», «tag2», «tag3». При этом не один из трёх, а все три.
...
Рейтинг: 0 / 0
подскажите как исправить запрос
    #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
подскажите как исправить запрос
    #39965381
Фотография 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
подскажите как исправить запрос
    #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
подскажите как исправить запрос
    #39965392
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дальше должны быть по идее примеры на модельке, xmltable, функции и CONTAINS
...
Рейтинг: 0 / 0
подскажите как исправить запрос
    #39965393
oragraf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С каждым ответом KISS нарушается все сильнее и сильнее
...
Рейтинг: 0 / 0
подскажите как исправить запрос
    #39965395
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
oragraf
С каждым ответом KISS нарушается все сильнее и сильнее

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


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