select WORKINFO.*
from WORKINFO
WHERE to_char(createdate, 'yyyy') = '2015'
AND WORKINFO.IsValid = 1
AND (completeDate is not null and to_char(completeDate, 'YYYY') = '2015')
and (APPROVALDEPT in (select s.oid
from sysorgan s
where s.parentorganoid = 1
or s.oid = 1) or
dutydeptoid in (select s.oid
from sysorgan s
where s.parentorganoid = 1
or s.oid = 1))
and workStatus >= 1
and isvalid = 1
AND (extend4 = 2 or extend4 is null )
ORDER BY DutyDeptOID ASC, WorkInfoNum DESC

select WORKINFO.*
from WORKINFO
WHERE to_char(createdate, 'yyyy') = '2015'
AND WORKINFO.IsValid = 1
AND (completeDate is not null and to_char(completeDate, 'YYYY') = '2015')
and (APPROVALDEPT in (select s.oid
from sysorgan s
where s.parentorganoid = 1
or s.oid = 1) or
dutydeptoid in (select s.oid
from sysorgan s
where s.parentorganoid = 1
or s.oid = 1))
and workStatus >= 1
and isvalid = 1
AND extend4 = 2 or extend4 is null
ORDER BY DutyDeptOID ASC, WorkInfoNum DESC
uj5u.com熱心網友回復:
仔細看一下 AND 及 OR 的邏輯運算子的規則。uj5u.com熱心網友回復:
or 在括號里面,結果集是過濾其他過濾條件后再加過濾條件extend4 = 2 和extend4 是空 得到的;or 在括號外面面,結果集是過濾其他過濾條件加extend4 = 2過濾得到的結果,再把extend4 是空過濾 得到的結果并在一起。
比如:
學校有3個班級,第一個過濾條件是班級1,第二個過濾條件是 男生 或 生日在1月份的
按你的寫法區別就是:
1、得到班級1里面的所有男生和1月生日的女生;
2、得到所有3個班級的1月生日的學生和班級1的男生。
2的結果比1多了班級2和班級3的1月生日的學生。明白了?
uj5u.com熱心網友回復:
非常感謝,你說得很清楚。uj5u.com熱心網友回復:
or 和and 的優先級問題。uj5u.com熱心網友回復:
優先級不一樣 not>and>or 就像10*(2+3)跟10*2+3uj5u.com熱心網友回復:
就和我們數學中加減法的優先級一樣,加個括號,身份檔次就上去了,干啥啥優先。NOT>AND>OR轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/73362.html
標籤:基礎和管理
下一篇:求一個存盤程序的最優寫法
