我所遇到的问题就是,先产生了生产订单,在生成销售订单。现在我需要判定那些生产订单未生成销售订单的列表。并把未生成的订单罗列出来。
SELECT A.rq, A.djh, A.khddh FROM ( SELECT rq, djh, khddh FROM e_ck_dj WHERE djlx = '生产订单' AND rq > '2021-10-01' ) AS A WHERE NOT EXISTS ( SELECT * FROM ( SELECT * FROM e_ck_dj WHERE djlx = '成品销售单' ) AS B WHERE A.khddh = B.khddh )
上述是我的实际代码。其中在khddh为同一个字符字段。另外由于在同一张表内,我这边操作的时候,查询的时候用了AS A和AS B来生成对应的临时表。刚开始直接查没有效果。
另外通过控制NOT 字符可以选择,是显示已经存在的“成品销售单”或者直接过滤。
1、方法一
[sql]select test.no from test1
where EXISTS
(select * from test2 where test1.no=test1.no)[/sql]
2、方法二
a表的id和b表的id相关联。
[sql]select *, case when (select count(*) from b where id = a.id)>0 then 1 else 0 end as flag from a[/sql]
a表和b表的字段和id这两列都一样,才将flag显示为1的话,用下面的查询:
[sql]select *, case when (select count(*) from b where id = a.id and 字段 = a.字段)>0 then 1 else 0 end as flag from a[/sql]
https://zhidao.baidu.com/question/982623548563240539.html