MySQL喜欢排除

时间:2016-01-09 13:36:55

标签: mysql select sql-like

我有这样的记录:

  
      
  1. WW.FK
  2.   
  3. WW.ZG。,WW.FK。
  4.   
  5. WW.ZS。,WW.ZG.,WW.FK。
  6.   
  7. WW.ZS。
  8.   

我想要排除只包含" FK"并检索那些包含" Sk"但他们可以包含" SK"

如果我使用查询

NOT LIKE '%WW.FK.%' 

我只得到

  
      
  1. WW.ZS。
  2.   

我使用查询

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

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

记录我想得到:

  
      
  1. WW.ZG。,WW.FK。
  2.   
  3. WW.ZS。,WW.ZG.,WW.FK。
  4.   
  5. WW.ZS。
  6.   

解决方案是什么?

3 个答案:

答案 0 :(得分:1)

解决方案是停止在字符串中存储事物列表。此列包含某种代码列表。它应存储在一个联结表中,其中一列用于原始实体,另一列用于每个代码。列表应该(通常)作为行存储在表中而不是作为分隔的字符串存储。然后你可以很容易地表达你的查询。

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

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

但是,尝试为您可能想要的每种类型的条件找出正确的正则表达式实际上只是浪费了工作,因为正确的数据结构使得这更容易。

答案 1 :(得分:0)

您可以尝试使用子查询,例如。

SELECT 
  * 
FROM
  `table_name` 
WHERE t NOT IN 
  (SELECT 
   t 
  FROM
    `table_name` 
  WHERE t LIKE '%WW.FK%')

答案 2 :(得分:-1)

我认为您应该删除百分号:

`dual` NOT LIKE 'WW.FK'