我有一个MySQL数据库,其中有一个media
表和一个keywords
表,并且media
和keywords
之间通过{{ 1}}连接表。
我想从符合以下条件的媒体表中获取所有记录:
media_keywords
从发现的集合中排除以下任何记录:
'description' is like 'dog' OR
'media.keywords' includes the id for the 'dog' keyword [100]
还排除以下任何行:
'description' is like 'cat' OR
'media.keywords' includes the id for the 'cat' keyword [400]
我也只想返回不同的行,所以我正在使用GROUP BY'media.id'
我目前拥有的SQL语句如下:
'media.keywords' includes the id for the 'monochrome' keyword [500]
这可以正确地提取记录中描述中“ dog”或作为关键字的位置,但完全忽略了排除项。
有人在这里看到我在做什么错吗?
答案 0 :(得分:0)
我不太会使用mySQL,但是我建议使用另一种方法
答案 1 :(得分:0)
我会使用where
子句:
select m.*
from media m
where (m.description like '%dog%' or
exists (select 1
from keywords k
where k.media_id = m.id and
k.keyword_id = 100
)
) and
(m.description not like '%cat%' or
exists (select 1
from keywords k
where k.media_id = m.id and
k.keyword_id in (400, 500)
)
);
这几乎是您条件的直接翻译。