2014-09-06 126 views
0

我正在SQLite中處理大型複雜數據庫。我試圖創建一個查詢,讓我所有的繁殖母羊,即那些沒有標記爲出售或屠夫的。SQLite NOT LIKE無法正常工作

我使用名爲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既賣和屠夫。

我完全失去了,對我來說,第二個查詢只是第一個的補充,所以我無法弄清楚爲什麼它不能按我期望的那樣工作。

回答

0

要正確反轉的條件,你必須申請De Morgan's law's

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

謝謝!我很確定我在做一些愚蠢的事情非常感謝! – OogieM 2014-09-06 19:43:09