我有这样的记录:


  
  FK
  WW.ZG.,WW.FK。
  WW.ZS.,WW.ZG.,WW.FK。
  WW.ZS.
  


我想排除仅包含“ FK”的记录,并检索包含“ Sk”以外的记录,但它们可以包含“ SK”

如果我使用查询

NOT LIKE '%WW.FK.%'


我只有


  
  WW.ZS.
  


我使用查询

t LIKE '%WW.__.%' AND t not like '%WW.FK.%'


我将排除所有包含FK的记录。

我想获取的记录:


  
  WW.ZG.,WW.FK。
  WW.ZS.,WW.ZG.,WW.FK。
  WW.ZS.
  


解决办法是什么?

最佳答案

解决方案是停止以字符串形式存储事物列表。此列包含某种代码列表。应该将其存储在联结表中,其中原始实体的一列和每个代码的另一列。列表应该(通常)存储为表中的行,而不是定界的字符串。然后,您可以轻松地表达您的查询。

如果您坚持使用这种数据结构,那么正则表达式可能会有所帮助。像这样:

where not col rlike '^([^,]*[.]FK(, )+)+.$'


但是,尝试为每种可能需要的条件类型找到正确的正则表达式实际上只是浪费了工作,因为正确的数据结构使此操作变得容易得多。

关于mysql - MySQL喜欢排除,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34694117/

10-11 12:45