是的,我就是不想用NOT IN ,因为速度很慢,而且我还只想用一条语句实现这个功能。 但是按照逻辑来说,这个时没有错的,即; ODSTATUS='Z' AND BOOKSN<>'3')的反就是:(a.odstatus<>'Z' or (a.odstatus='Z' and a.booksn='3')) 是吗??
打个比如 性别=女 and 年龄=20那反就是:所有不是20岁的女人的人的全部:应当是 性别<>女(男) or (性别=女 and 年龄<>20) 明白吗?
你的是<> 逻辑是没有问题的,注意我开始提的两点,可能是你结果不同的原因
呵呵,离散数学!性别=女 and 年龄<>20 即意:年龄不等于20岁的所有女人 反则 年龄等于20岁非女人的人(那么包括男人、人妖、中性人)
select count(distinct a.ordid) as num from order_m a, order_r b where a.ordid=b.ordid and b.cktype='P' and b.orgid=2198 and SUBSTR(ORDATE,0,8)>='20020227' and SUBSTR(ORDATE,0,8)<='20030227' and (a.odstatus<>'Z' or (a.odstatus='Z' and a.booksn='3')) 是不是少了 A.ORDID NOT IN (SELECT ORDID FROM ORDER_M WHERE ORGID=2198 AND ODSTATUS='Z' AND BOOKSN<>'3' ); 中的ORGID=2198这个条件改为 select count(distinct a.ordid) as num from order_m a, order_r b where a.ordid=b.ordid and b.cktype='P' and b.orgid=2198 and SUBSTR(ORDATE,0,8)>='20020227' and SUBSTR(ORDATE,0,8)<='20030227' and (a.orgid<>2198 or a.odstatus<>'Z' or (a.orgid=2198 and a.odstatus='Z' and a.booksn='3')) 试试。
not in效率太低,这样看看: select count(*) from (SELECT A.ORDID FROM ORDER_M A,ORDER_R B WHERE A.ORDID=B.ORDID AND B.ORGID=2198 AND B.CKTYPE='P' and SUBSTR(ORDATE,0,8)>='20020227' and SUBSTR(ORDATE,0,8)<='20030227' minus SELECT ORDID FROM ORDER_M WHERE ORGID=2198 AND ODSTATUS='Z' AND BOOKSN<>'3' ) c group by c.oradid 试试
多谢各位,结贴了。 另: 性别=女 and 年龄<>20 即意:年龄不等于20岁的所有女人 反则 年龄等于20岁非女人的人(那么包括男人、人妖、中性人), 反之好像有点问题, 应该对于所有非女人的人,没有年龄限制才对的:)
但是按照逻辑来说,这个时没有错的,即;
ODSTATUS='Z' AND BOOKSN<>'3')的反就是:(a.odstatus<>'Z' or (a.odstatus='Z' and a.booksn='3'))
是吗??
性别=女 and 年龄=20那反就是:所有不是20岁的女人的人的全部:应当是
性别<>女(男) or (性别=女 and 年龄<>20)
明白吗?
逻辑是没有问题的,注意我开始提的两点,可能是你结果不同的原因
反则 年龄等于20岁非女人的人(那么包括男人、人妖、中性人)
from order_m a, order_r b
where a.ordid=b.ordid and b.cktype='P' and b.orgid=2198
and SUBSTR(ORDATE,0,8)>='20020227' and SUBSTR(ORDATE,0,8)<='20030227' and (a.odstatus<>'Z' or (a.odstatus='Z' and a.booksn='3')) 是不是少了
A.ORDID NOT IN (SELECT ORDID FROM ORDER_M WHERE ORGID=2198 AND ODSTATUS='Z' AND BOOKSN<>'3' ); 中的ORGID=2198这个条件改为
select count(distinct a.ordid) as num
from order_m a, order_r b
where a.ordid=b.ordid and b.cktype='P' and b.orgid=2198
and SUBSTR(ORDATE,0,8)>='20020227' and SUBSTR(ORDATE,0,8)<='20030227' and (a.orgid<>2198 or a.odstatus<>'Z' or (a.orgid=2198 and a.odstatus='Z' and a.booksn='3'))
试试。
select count(*) from
(SELECT A.ORDID
FROM ORDER_M A,ORDER_R B
WHERE A.ORDID=B.ORDID AND B.ORGID=2198 AND B.CKTYPE='P'
and SUBSTR(ORDATE,0,8)>='20020227' and SUBSTR(ORDATE,0,8)<='20030227'
minus
SELECT ORDID FROM ORDER_M WHERE ORGID=2198 AND ODSTATUS='Z' AND BOOKSN<>'3' ) c
group by c.oradid
试试
另:
性别=女 and 年龄<>20 即意:年龄不等于20岁的所有女人
反则
年龄等于20岁非女人的人(那么包括男人、人妖、中性人),
反之好像有点问题, 应该对于所有非女人的人,没有年龄限制才对的:)