【发布时间】:2012-06-15 14:43:44
【问题描述】:
我在 MySQL 中存储了一些数据,并希望过滤掉符合给定条件的行。
听起来很简单,但实际上并不容易,因为涉及到一些连接条件。
我确实有以下表格:
items : id, ...
genres: id, name:varchar, item_id
每个项目都有多种类型。
如果至少一个流派确实与给定流派名称(或一组名称)匹配,则查询应过滤 out 项。
例如:
Item with id 1 has 3 genres
- genre name = 'foo'
- genre name = 'bar'
- genre name = 'baz'
如果给定的流派名称是 'bar'、['bar'、'baz'、'xyz'] 等,则项目 1 可能不是结果集的一部分。
我尝试离开加入项目的流派并应用带有“genres.name NOT IN (?)”的 WHERE 语句。 ?是给定的流派名称集。
这(当然)只适用于只有一种类型的项目。同样可以通过多个 WHERE 条件来实现:WHERE name 'a' AND name 'b' ...
任何想法如何正确完成此查询?
提前致谢!
【问题讨论】:
-
能否请您提供一个示例查询,说明它的作用,然后说明您希望它做些什么不同的事情?
-
我还不明白这些表...所以你有一个
items表和一个genres表。为什么后一个表有一个item_id列?我希望看到一个多对多关联表,它将项目与流派联系起来。 -
如果至少有一个流派与给定的流派名称匹配,为什么要过滤掉项目?在问题的第一行中,你写了相反的内容。
-
就@RaviJain 而言,您的示例与上面您想要的结果描述不匹配。根据您的描述,第 1 项 将 成为结果集的一部分,因为它包含
bar,不是吗?