使用SQL查询在单词列表中查找确切的单词匹配

时间:2015-06-30 15:41:16

标签: mysql regex

我有一张如下表所示的表格。

entityId |  mId      |  supertTypes                     |  SubTypes
------------------------------------------------------------
12       |  /m.098yu | /m.0yhtg, /m.089hj0__            | Null
13       |  /m.kju_c_| /m.0ypwec, /m.0bnm0__, /m.0hgt   | /m.098yu

我的查询是:

select mId from table where superTypes= /m.0yhtg;

答案应为 /m.098yu

我根据page1page2编写了以下问题,但我无法得到正确的结果。

select mId from table where supertypes RLIKE "[[:<:]]/m.0yhtg[[:>:]]";

Select mId from table where supertypes LIKE '/m.0yhtg';

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您可以使用find_in_set,但这需要一个没有空格的列表。因此,您需要先使用replace

删除它们
Select mId from table 
where find_in_set('/m.0yhtg', replace(supertypes, ' ', '')) > 0

但实际上你应该改变你的桌面设计。永远不要在一列中存储多个值!

更好的数据库设计是添加新表

entities table
--------------
entityId
mId


types table
----------------
id
name


entity_types table
------------------
entity_id
type_id
is_super_type

您可以添加另一个名为is_super_type的表,而不是字段entity_subTypes,而是将entity_typesentity_supertypes命名为。