SQLite NOT LIKE无法正常工作

时间:2014-09-06 17:55:56

标签: android sqlite

我在SQLite中使用大型复杂数据库。我正在尝试创建一个查询,它将为我提供所有繁殖母羊,即那些未标记为卖或屠夫的母羊。

我使用一个名为alert01的字段来包含我扫描和查找绵羊时需要注意的数据。出售的绵羊会有卖还是卖?在那个领域的某个地方。可以去屠夫的羊会有屠夫或屠夫吗?在那个领域。有些绵羊在警报文本字段中都有,因为它们可以去屠宰或出售。

此查询将正确查找农场中出售的所有成年母羊或屠夫:

SELECT sheep_table.sheep_id, 
 sheep_table.sheep_name, sheep_table.birth_date, 
sire_table.sheep_name as sire_name, dam_table.sheep_name as dam_name , sheep_table.alert01
FROM sheep_table 
left join sheep_table as sire_table on sheep_table.sire_id = sire_table.sheep_id
left join sheep_table as dam_table on sheep_table.dam_id = dam_table.sheep_id
WHERE sheep_table.remove_date is ''
and sheep_table.sex = 2
and sheep_table.birth_date not like "2014%"
and (sheep_table.alert01  like '%Butcher%' or sheep_table.alert01  like '%Sell%')
order by  sheep_table.sheep_name asc

这个没有找到非卖品或屠夫羊,我不明白为什么。

SELECT sheep_table.sheep_id, 
 sheep_table.sheep_name, sheep_table.birth_date, 
sire_table.sheep_name as sire_name, 
dam_table.sheep_name as dam_name, sheep_table.alert01
FROM sheep_table 
left join sheep_table as sire_table on sheep_table.sire_id = sire_table.sheep_id
left join sheep_table as dam_table on sheep_table.dam_id = dam_table.sheep_id
WHERE sheep_table.remove_date is ''
and sheep_table.sex = 2
and sheep_table.birth_date not like "2014%"
and (sheep_table.alert01 not like '%Butcher%' or sheep_table.alert01 not like '%Sell%')
order by  sheep_table.sheep_name asc

几乎所有的羊都只消除了那些在alert01字段中同时拥有Sell和Butcher的羊。

我完全迷失了,对我而言,第二个问题只是第一个问题的补充,所以我无法弄清楚它为什么不按照我的预期运作。

1 个答案:

答案 0 :(得分:0)

要正确撤消条件,您必须应用De Morgan's law's

WHERE ... (alert01 NOT LIKE '%Butcher%' AND alert01 NOT LIKE '%Sell%') ...
                                        ^^^