Mysql SQL Select语句未按预期使用“like”

Mysql SQL Select语句未按预期使用“like”,mysql,sql,database,sql-like,Mysql,Sql,Database,Sql Like,以下查询按预期工作,不返回带有“c”标志的数据: SELECT * FROM `func` WHERE `next_act` < 1484870400 AND `assigned_to` IS NULL AND `type` like '%FTTC%' AND (`flags` NOT LIKE '%c%' OR `flags` IS NULL) ORDER BY `priority`, `kci3_date`, `kci3_time` ASC LIMIT 1 你用过或用过一

以下查询按预期工作,不返回带有“c”标志的数据:

SELECT * 
FROM  `func` 
WHERE  `next_act` < 1484870400
AND  `assigned_to` IS NULL
AND `type` like '%FTTC%'
AND  (`flags` NOT LIKE '%c%' OR `flags` IS NULL)
ORDER BY `priority`, `kci3_date`, `kci3_time` ASC
LIMIT 1
你用过或用过一个不喜欢的

SELECT * 
FROM  `func` 
WHERE  `next_act` < 1484870400
AND  `assigned_to` IS NULL
AND `type` like '%FTCT%'
AND  ((`flags` NOT LIKE '%c%' 
       AND `flags` NOT LIKE 'w' ) -- Should this be '%w%' ?
     OR `flags` IS NULL)
ORDER BY `priority`, `date`, `time` ASC
LIMIT 1
您还可以使用:

SELECT * 
FROM  `func` 
WHERE  `next_act` < 1484870400
AND  `assigned_to` IS NULL
AND `type` like '%FTCT%'
AND  (NOT (`flags` LIKE '%c%' 
       OR `flags` LIKE 'w' ) -- Should this be '%w%' ?
      OR `flags` IS NULL)
ORDER BY `priority`, `date`, `time` ASC
LIMIT 1
表示不喜欢“xxx”或不喜欢“yyy”意味着“xxx”实际上不喜欢“yyy”,因此它将返回值

您使用或使用了不喜欢的

SELECT * 
FROM  `func` 
WHERE  `next_act` < 1484870400
AND  `assigned_to` IS NULL
AND `type` like '%FTCT%'
AND  ((`flags` NOT LIKE '%c%' 
       AND `flags` NOT LIKE 'w' ) -- Should this be '%w%' ?
     OR `flags` IS NULL)
ORDER BY `priority`, `date`, `time` ASC
LIMIT 1
您还可以使用:

SELECT * 
FROM  `func` 
WHERE  `next_act` < 1484870400
AND  `assigned_to` IS NULL
AND `type` like '%FTCT%'
AND  (NOT (`flags` LIKE '%c%' 
       OR `flags` LIKE 'w' ) -- Should this be '%w%' ?
      OR `flags` IS NULL)
ORDER BY `priority`, `date`, `time` ASC
LIMIT 1

表示不喜欢“xxx”或不喜欢“yyy”意味着“xxx”实际上不喜欢“yyy”,因此它将返回值

您应该将条件与AND组合,而不是与OR组合。根据你的评论

我希望它显示除c、w或NULL以外的任何标志

你想要这样的东西:

  SELECT * 
    FROM `func` 
   WHERE `next_act` < 1484870400
     AND `assigned_to` IS NULL
     AND `type` like '%FTCT%'
     AND  (`flags` <> 'c' AND 
           `flags` <> 'w' AND 
           `flags` IS NOT NULL)
ORDER BY `priority`, 
         `date`, 
         `time` ASC
   LIMIT 1

您应该将条件与AND相结合,而不是与OR相结合。根据你的评论

我希望它显示除c、w或NULL以外的任何标志

你想要这样的东西:

  SELECT * 
    FROM `func` 
   WHERE `next_act` < 1484870400
     AND `assigned_to` IS NULL
     AND `type` like '%FTCT%'
     AND  (`flags` <> 'c' AND 
           `flags` <> 'w' AND 
           `flags` IS NOT NULL)
ORDER BY `priority`, 
         `date`, 
         `time` ASC
   LIMIT 1

它返回带有“c”的数据,因为您正在使用or运算符

`flags` NOT LIKE '%c%' OR `flags` NOT LIKE 'w`

它将检查此条件和返回行,请更正您的查询

因为您使用的是or运算符,所以返回的数据带有“c”

`flags` NOT LIKE '%c%' OR `flags` NOT LIKE 'w`

它将检查此条件和返回行,请更正您的查询,不象'w'的标志允许标志为除'w'和null'c'以外的任何其他标志,包括'w'和'c%'我认为您必须使用而不是ORwrite,'flags'不象'%c%'和'flags'不象'w'或'flags'为null,而不是您想显示什么标志?尽管不象'%c%',它仍会用c返回标志,不象'w'的标志允许标志为除'w'和null'c'以外的任何其他标志,包括'w'和'c%'我认为您必须使用而不是ORwrite,'flags'不象'%c%'和'flags'不象'w'或'flags'为null,而不是显示什么标志?尽管不象'%c%'它仍会用c返回标志??感谢所有的帮助-切换到'and'时所有功能都正常而不是“或”,谢谢你的帮助-当切换到“和”而不是“或”时,一切正常