Mysql SQL Select语句未按预期使用“like”
以下查询按预期工作,不返回带有“c”标志的数据: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 你用过或用过一
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'时所有功能都正常而不是“或”,谢谢你的帮助-当切换到“和”而不是“或”时,一切正常