2011-10-01 17 views
2

我想選擇表格中單元格的值不是foo的所有內容。我認爲它會與WHERE NOT NULL類似,類似SELECT * FROM database.table WHERE NOT 'foo';,但它只返回沒有數據的列標題。mysql(5.1)> select * from database.table其中不是foo(在所有字段中)

編輯:我想這樣做沒有指定特定的列(NOT 'foo'所有字段)。

+0

您可能想看看動態SQL。 –

+3

這是一個奇怪的問題。你確定你確實需要這樣做嗎? –

+0

很確定。我有點驚訝這不是一個更普遍的事情...... – jacob

回答

3

有沒有辦法做到這一點不指定字段和條件,在

select * from table where 
    col1 != value and 
    col2 != value and 
    ... 

根據你所說的

意味着單元格的值是不是foo

您可能需要更改and(一行中的列都不符合條件)至or(至少一列不匹配e條件)。

+0

嗨,吉姆,謝謝,但這樣做最終會變得非常麻煩而且效率極低。 'AND'會是合適的操作符,因爲我想避免任何'foo'的實例)。 – jacob

3

作爲@Jim Garrison的回答,您必須指定列來比較'foo'值。否則,你自己正在測試一個常量值,可以是false(零)或true(非零)。

SELECT * FROM database.table WHERE NOT 'foo'返回無數據,因爲'foo'是一個非錯誤常數值。因此NOT 'foo'對於表中的每一行都是false,所以沒有行匹配,結果是一個空集。

Jim給出了一種依次測試每列的語法。這是另一種替代語法:

SELECT * FROM database.table WHERE 'foo' NOT IN (column1, column2, column3, ...) 

但是,我同意來自@Mosty Mostacho的評論。在關係數據庫中,測試多個列的單個值是很奇怪的。每列應該是不同的邏輯類型的屬性,所以在許多列中尋找相似的值是不常見的(不是不可能的,但不常見)。

這通常意味着您正在使用重複組列,這違反了First Normal Form。相反,您可能需要創建一個子表,以便您搜索的所有值都位於單個列中,並位於多行中。

+0

嗨比爾,表格存儲來自我不能控制的調查的數據。在調查中,有許多「跳過」,其中問題是不可見的,因此Db中的字段將是空白的,但是當提交調查時,不可見問題的值被設置爲「foo」。這讓我知道這個字段的數據應該被忽略。所以我想獲得所有不是'foo'的數據。 – jacob

+0

順便說一句,'foo'會被記錄爲'NULL',只不過我需要區分有意空白的數據和恰好空白的數據:假設用戶在到達結束之前停止調查。最初的'INSERT'會導致第1頁上的字段被設置爲NULL。通過調查頁面進行的後續用戶更新會將NULL更改爲實際的數據。但有時候一個問題是不適用的(基於前面的問題的回答),所以這個問題是隱藏的。我不想弄清事後是哪種情況,所以隱藏的問題記錄爲'foo' – jacob

0

看起來MySQL似乎不夠成熟。相反,我將不得不在我的php循環中添加一個if-test來檢查foo,如果foo存在,則打破。我不想這樣做,因爲我必須在測試單元格的值之前進入幾個嵌套循環...

+1

你得到的兩個答案中哪一個不夠複雜? –

相關問題