SQL查询没有选择属性

时间:2017-03-17 13:47:30

标签: mysql sql

我有这样的查询 fillna

- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLCircularRegion *)region
{
}
- (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLCircularRegion *)region
{
}

我指定sheetcat为Unsubscribed,但查询响应是NULL(或空白)? 为什么呢?

2 个答案:

答案 0 :(得分:1)

AND takes precedence over OR。您需要对OR条件进行分组:

SELECT   * 
FROM     `GSheets` 
WHERE    `sheetcat` = 'Unsubscribed' 
AND      
(        `user` LIKE '%,r00t,%' 
OR       `user` LIKE 'r00t,%' 
OR       `user` LIKE '%,r00t' 
OR       `user` = 'r00t'
)

第二个sheetcat条件也是多余的,您可以删除NULL支票。

答案 1 :(得分:1)

将事物列表存储在分隔字符串中时,这是一个问题。糟糕,糟糕,糟糕的数据设计。第一个和主要建议是创建一个新表,每个表一行,每个用户一行。

现在,有时我们会遇到其他人真正糟糕,糟糕,糟糕的设计决策。 MySQL提供find_in_set(),它可以满足您的需求:

SELECT g.*
FROM `GSheets` g
WHERE `sheetcat` = 'Unsubscribed' AND
      FIND_IN_SET('r00t', `user`) > 0;

请注意sheetcat IS NOT NULL是多余的。 NULL值将在第一个条件下失败。除非你可能打算:

SELECT g.*
FROM `GSheets` g
WHERE `sheetcat` = 'Unsubscribed' OR
      (sheetcat IS NOT NULL AND FIND_IN_SET('r00t', `user`) > 0);

但这不是我对你的意图的第一次猜测。

如果在OR条件周围加上括号,您的查询也会有效。但即使这样也太复杂了。使用LIKE的更简单版本是:

WHERE `sheetcat` = 'Unsubscribed' AND
       CONCAT(',', `user`, ',') LIKE '%,r00t,%'