2011-01-06 23 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')。