MySQL中的匹配集

MySQL中的匹配集,mysql,Mysql,我正在运行一个类似于以下内容的查询: `从'table'中选择*,在'table'中查找集合('1','tags')或在'table'中查找集合('2','tags')… 有没有一种更简单的方法来运行查询,以确定一个集合中的任何数字是否与另一个集合中的任何数字匹配 例如,我想这样做: SELECT `table`.* FROM `table` JOIN `ThingTags` ON `ThingTags`.`ThingID` = `table`.`ID` WHERE `ThingTags`

我正在运行一个类似于以下内容的查询:

`从'table'中选择*,在'table'中查找集合('1','tags')或在'table'中查找集合('2','tags')…

有没有一种更简单的方法来运行查询,以确定一个集合中的任何数字是否与另一个集合中的任何数字匹配

例如,我想这样做:

SELECT `table`.*
FROM   `table` JOIN `ThingTags` ON `ThingTags`.`ThingID` = `table`.`ID`
WHERE  `ThingTags`.`TagID` IN (1,2,7,34,45);

`SELECT*FROM`table`WHERE MATCH\u ANY\u在\u集合中('1,2,7,34,45','tags')

在字符串字段中有一个分隔的“tags”列表并不是像MySQL这样的关系数据库管理系统的一个很好的用途

更明智的做法是创建一个单独的表,我们称之为
ThingTags
,它将现有表中的内容与其标记关联起来:

CREATE TABLE ThingTags (
  ThingID INT NOT NULL,
  TagID   INT NOT NULL,
  FOREIGN KEY (ThingID) REFERENCES `table` (ID)
);
外键
约束告诉MySQL,如果
中有相应的条目(其中
ThingTags.ThingID=table.ID
),记录只能存在于
ThingTags

因此,该表中每个“事物”都有多条记录:

您的查询将如下所示:

SELECT `table`.*
FROM   `table` JOIN `ThingTags` ON `ThingTags`.`ThingID` = `table`.`ID`
WHERE  `ThingTags`.`TagID` IN (1,2,7,34,45);

创建一个单独的事物表:标记关系:也就是说,成对的
(thing\u id,tag\u id)
@eggyal-有没有一种不用过程就能做到这一点的方法?请参阅下面我的答案,以了解我的意思的更完整的描述。