为什么忽略where子句

时间:2015-01-09 10:27:27

标签: android sqlite operator-precedence

我正在尝试以下查询:

return mDb.query(DATABASE_TABLE1, asColumnsToReturn,
       "NotificationDateFor like ?
       OR FriendsName like ?" +"
       AND TypeNotification <> 'Event'
       AND RadioType <> '3'
       ORDER BY DateToNotify ASC",
       new String[] { value, value }, null,null, null);

但是我观察到在这种情况下对应于:

的部分
AND TypeNotification <> 'Event' AND RadioType <> '3'

被忽视了。可能是什么原因?

1 个答案:

答案 0 :(得分:2)

documentation中可以看出,AND的优先级高于OR,因此NotificationDateFor匹配就足以选择一行:

sqlite> select 1 or 0 and 0 and 0;
1

你必须使用括号:

(NotificationDateFor LIKE ? OR FriendsName LIKE ?) AND TypeNotification <> 'Event' AND RadioType <> '3'