72 похожих чатов

Привет. Есть 3 таблицы: CREATE TABLE posts (

id SERIAL NOT NULL PRIMARY KEY
);

CREATE TABLE tags (
id SERIAL NOT NULL PRIMARY KEY
);

CREATE TABLE posts_tags (
id SERIAL NOT NULL PRIMARY KEY,
post_id INT NOT NULL,
tag_id INT NOT NULL
);

Как можно найти все посты у которых есть ВСЕ перечисленные тэги?
Например у поста 1 есть тэги 1 и 2, а у поста 2 есть только тэг 1. И если я ищу по тэгам 1 и 2, то должен найти только пост 1.
То есть запрос
SELECT posts.*
FROM posts
INNER JOIN posts_tags ON posts.id = posts_tags.post_id
WHERE posts_tags.tag_id IN (1, 2);
не подходит, потому что он мне вернет посты у которых есть или тэг 1 или тэг 2

похоже что запрос
SELECT posts.*
FROM posts
INNER JOIN
(
SELECT post_id
FROM posts_tags
WHERE tag_id IN (1, 2)
GROUP BY post_id
HAVING COUNT(*) = 2
) AS t ON posts.id = t.post_id
делает то что надо, но он мне не особо нравится, так как такое сложно будет перенести на ORM

база postgresql

2 ответов

16 просмотров

CREATE TABLE posts_tags ( id SERIAL NOT NULL PRIMARY KEY, — это поле, id, тут не нужно.

where exists () and exists () and exists () или join .. join ... join ...

Похожие вопросы

Обсуждают сегодня

Ребята, всем привет. Подскажите, пожалуйста, можно ли как-то через бота понять, что этого бота добавили в группу\канал и выдали ему права администратора?
Artem Stormageddon
9
Привет, такой вопросик появился кажется ли вам что Rust слишком сложный/строгий для высокоуровневого программирования и слишком "безопасный"/строгий для низкоуровневого?
Крокант
10
Это переведённый текст с английского. Я не говорю на русском, но могу использовать переводчик Телеграм. Приветствую! Я начинающий веб-разработчик и все еще учусь. В настояще...
𐩱𐩪𐩣𐩱𐩲𐩺𐩡
2
А какие существуют способы обработки ошибок выделения памяти в ядре? Т.е., допустим, есть функция, которая возвращает адрес свободной страницы в физической памяти и диапазон в...
disba1ancer
51
Всем привет. Хотел бы написать для себя свою ос. Причины: 1) нужен опыт в чем-то 2) будет меньше весить 3) свое, но там будут свои задумки Я понимаю что нужно писать для всег...
Shadow Akira
18
А не хотим ли мы развлечься? 😉 Но так чтобы с пользой для наших профессиональных навыков?? 👨‍🎓👩‍🎓 Предлагаю на октябрь запланировать тестовый запуск новой командной игры "Игр...
Andrii Kurdiumov
2
Всем привет! Скажите, никто не пытался уменьшить размер процесса ssl, которые ассоциируется с открытым соединением (не помню точное название этого процесса, но там была какая-...
Алексей
20
5? да там все 10
Boris Vinogradov
12
Привет всем! Почему этот код не срабатывает при добавлении или удалении пользователя из чата? bot.on('chat_member', async (ctx) => { console.log(ctx); }) bot.launch({allo...
Alexander
5
у кого сколько оперативы на базе данных ?
АДИЛЬБЕК
4
Карта сайта