我有两个表。SQL查询来查找包含资源不止一个标签
Resource:
md5 (PK), link, title
Tags:
md5 (FK), category
这是一个一对多的关系,使得资源可以有多个标签。 我希望能够提取具有两个标签的资源,例如一个包含标签'web'和'blog'的资源。如果我使用“OR”,这显然会返回甚至只包含“网络”或只包含“博客”的文件,但如果我使用AND,我没有得到任何结果,即使我知道有包含这两个标签资源
SELECT DISTINCT tags.MD5, Resource.Title, Resource.Link, tags.Category
FROM Resource
INNER JOIN tags ON Resource.MD5 = tags.MD5
WHERE
(tags.Category = @tag)
OR
(tags.Category = @tag2)
ORDER BY tags.MD5
+1如果您希望所有**标签仅用于那些至少包含@tag AND @ tag2的资源,那么这是一个较好的解决方案。 – 2011-04-25 19:23:32
基于OP所需的输出,这是什么意 – 2011-04-25 19:26:47
的EXISTS是让您轻松处理其他逻辑,像“资源与标签A或B”的美:'选择X与Y WHERE EXISTS(...)或者虽然存在(...)'。根据我的经验,这非常有用,速度非常快,通常比用于反连接的“LEFT JOIN”或“NOT IN()”更快。 – 2011-04-25 19:28:22