2011-01-06 49 views
0

T的一個選擇查詢作爲如何在選擇查詢中一起使用「AND」和「OR」關鍵字?

SELECT * FROM tbl_docuserstatus WHERE doc_id='1' 
AND doc_midlvluser = '1' AND 
(docstatus_id != '4' OR docstatus_id != '5' OR docstatus_id != '8' OR docstatus_id != '0') 

但結果似乎犯規爲(docstatus_id != '4' OR docstatus_id != '5' OR docstatus_id != '8' OR docstatus_id != '0')部分是可操作的。

我需要查詢工作爲顯示其文檔ID = 1和doc_midlvluser = 1和dostatus_id SHLD不等於4或5或8或0

請幫我那應該怎麼B中的所有值?

+0

問題是你期待的。我不知道這是否符合你的需要,因爲你不告訴我們它應該如何表現!這裏沒有語法錯誤,所以你需要給我們更多的信息! – jwueller 2011-01-06 13:01:33

+0

瞭解一些布爾代數。這不僅很有趣,而且在編程時也會有所幫助(基本上,每次有條件時)。 – delnan 2011-01-06 13:06:51

回答

3

用途:

SELECT * FROM tbl_docuserstatus WHERE doc_id='1' 
AND doc_midlvluser = '1' AND 
(docstatus_id != '4' AND docstatus_id != '5' 
AND docstatus_id != '8' AND docstatus_id != '0') 

或者只適用德摩根定理,所以它更容易編寫和閱讀:

SELECT * FROM tbl_docuserstatus WHERE doc_id='1' 
AND doc_midlvluser = '1' AND 
NOT (docstatus_id = '4' OR docstatus_id = '5' 
    OR docstatus_id = '8' OR docstatus_id = '0') 

或者更好的是,使用IN:

SELECT * FROM tbl_docuserstatus WHERE doc_id='1' 
AND doc_midlvluser = '1' AND 
    docstatus_id NOT IN ('4','5','8','0') 

相關這個:https://stackoverflow.com/questions/130965/what-is-the-worst-code-youve-ever-written/311377#311377

而這個:Is it acceptable to only use the 'else' portion of an 'if-else' statement?

0

你或子句互斥:

如果docstatus_id = 4,則根據該條款的第一部分是無效的,但對其餘有效。如果這就是你想要達到的目標,那麼或許你應該使用docstatus_id而不是('4','5','8','0')。