Предположим, у меня есть следующие три таблицы, выражающие отношение, в котором сообщениям присваиваются теги (отношение многие ко многим):
create table posts (id integer, content text, primary key (id));
create table tags (tag varchar(30), description text, primary key (tag));
create table post_tags (post_id integer, tag varchar(10),
primary key (post_id, tag),
foreign key (post_id) references posts (id),
foreign key (tag) references tags (tag));
Теперь предположим, что я хочу найти все сообщения с точно такими же тегамиумный, интересный} и никаких других.
Вот моя неудачная попытка.Он находит посты с тегами {умный, интересный}, но также находит посты с тегами {умный, интересный, раздражающий} или {умный, интересный, неэтичный}.
select t1.post_id from post_tags as t1
inner join post_tags as t2 on t2.post_id=t1.post_id
where t1.tag='clever' and t2.tag='interesting';
Я открытлюбые предложения по изменению структуры, чтобы сделать эту операцию проще.Однако я хочу избежать таких вещей, как добавление списка тегов через запятую в таблице posts
.