0

当我希望查询返回值列表中至少一个值与值列表中至少一个值匹配的所有行时,查询 MySql 的最佳方法是什么?

例子

如果我的表包含以下行:

name         groups
item1        gr1, gr2
item2        gr1,gr2,gr3
item3        gr1,gr3

我有一个值列表:“gr3,gr4,gr5”

我想在我的表中找到其组字段中至少具有值 gr3、gr4 或 gr5 之一的所有行。

所以这种情况下的查询应该返回 item2 和 item3

如何在不循环脚本的情况下构建有效的查询?

4

1 回答 1

2

我个人认为这不是构建数据库的最佳方式。我会有一个链接表,类似于 item_groups ,它会为每个项目组链接保留一行,所以你所拥有的将是:

item_name         group_name
item1        gr1
item1        gr2
item2        gr1
item2        gr2
item2        gr3
item3        gr1
item3        gr3

这样你就可以简单地做

SELECT item_name FROM item_groups WHERE group_name IN ('gr3','gr4','gr5');

这是我在将数据库理论作为我的 BSc 的一部分时所教的内容,虽然它确实会产生更多的表格,但它使搜索变得更快、更容易。高温高压

于 2009-10-15T10:41:46.440 回答