@MIsternik

Как правильно составить запрос?

Есть таблица следующего вида:
Content_id | Tag_id
1 | aa
1 | bb
2 | aa
2 | cc
3 | bb
3 | cc

Как получить Content_id которые, например, относятся к "аа", но не относятся к "bb" ?
Если выбираю так:
WHERE tc."Tag_Id" IN('aa')
AND tc."Tag_Id" NOT IN('bb')
То так как записи разные, все равно получу id 1 за примера.
IN, так как по списку ищу.

Способ, который мне бы казался правильным чет не приходит в голову.
  • Вопрос задан
  • 587 просмотров
Решения вопроса 1
SELECT t.*
FROM __test t
LEFT JOIN __test t2 ON t.Content_id = t2.Content_id AND t2.Tag_id = 'bb'
WHERE t.Tag_id = 'aa' AND t2.Tag_id is NULL

если есть первичные ключи, то t.id = t2.id
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Therapyx
@Therapyx
Data Science
Вообще не понятно, почему ты не используешь ключи ) в любом случае вариант тут только такой
Select Content_id from table_name where Tag_id = 'aa'

В твоем случае ты получишь 2 строки... Как раз там где 2 раза "аа". Это айди 1 и айди 2.
Иначе - меняй структуру, читай о нормализации баз данных
club.shelek.ru/viewart.php?id=311
Ответ написан
@mletov
SELECT Content_id 
FROM table
WHERE t.Tag_id = 'aa'
EXCEPT 
SELECT Content_id 
FROM table
WHERE t.Tag_id = 'bb'


Упс, извините, проморгал, что это MySql, он не поддерживает EXCEPT

Тогда так

SELECT Content_id 
FROM table AS t
WHERE t.Tag_id = 'aa'
AND t.Tag_id NOT IN
( 
    SELECT Content_id 
    FROM table
    WHERE t.Tag_id = 'bb'
)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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