сложная(?) выборка
Есть три таблици Tag, Post, Tag_has_Post
Tag и Post имеют связь MANY_MANY через таблицу Tag_has_Post.
Теперь если нужно выбрать все посты имеющие какойто один тег - то все просто.
Можно ли одним (или двумя запросами) выбрать все посты которые имеют указанные теги???
Скажем есть (напишу упрощенно)
Пост | Теги
1 | 1, 2, 3
2 | 1, 3, 4
3 | 1, 2, 5
4 | 2, 3, 5, 6
Мне нужно выбрать все посты которые имеют теги 2 и 5.
Тоесть получить я должен Посты 3 и 4.
(Это действительно не тривиально или я туплю сегодня).
Я нашел два варианта но они корявые, если их можно упростить то я не вижу как.
1.
SELECT DISTINCT Post_id FROM Tag_has_Post
WHERE Post_id IN (SELECT DISTINCT Post_id from Tag_has_Post WHERE Tag_id=2) AND Tag_id=5
Если тегов много то придется вкладывать подзапрос в запрос снова и т.д.
Верхний предел для количества тегов на пост я оцениваю.... ну скажем в 20 тегов/пост. Тоесть фактически будем иметь 19+1 запросов.
2.
SELECT DISTINCT t1.Post_id FROM Tag_has_Post t1, Tag_has_Post t2 WHERE t1.Tag_id=2 AND t2.Tag_id=5 AND t1.Post_id=t2.Post_id
Такой запрос проще формировать - ну мне так кажется, но он не особо лучше первого.
Ситуация с количеством запросов таже.
Subject
Views
Written By
Posted
сложная(?) выборка
11209
February 17, 2010 08:40AM
4022
February 18, 2010 12:44AM
Sorry, you can't reply to this topic. It has been closed.
Content reproduced on this site is the property of the respective copyright holders.
It is not reviewed in advance by Oracle and does not necessarily represent the opinion
of Oracle or any other party.