我在MS Access 2013中有两个表。
(ID是主键)
ID PART_ID SERVICE_DATE REMARK WITHDRAWN 1 A0001 01/04/2014 2 A0002 01/04/2014 3 A0003 01/04/2014 SCRAP 4 A0004 01/04/2014 5 A0001 01/05/2014 6 A0002 01/05/2014
(ID是主键)
ID PART_ID DRAW_DATE 1 A0001 02/04/2014 2 A0002 02/04/2014 3 A0001 02/05/2014
我想在服务表的 WITHDRAWN 字段中添加“ NO ”,表示该部分尚未撤销,如果:
- 部分是服务表中的第一次,并且从未出现在WITHDRAW表中。
- 部分在服务表和WITHDRAW表中出现几次,此次已经提供服务,尚未撤销。
- 部分不属于“SCRAP”类别。
醇>
服务表
ID PART_ID SERVICE_DATE REMARK WITHDRAWN 1 A0001 01/04/2014 2 A0002 01/04/2014 3 A0003 01/04/2014 SCRAP 4 A0004 01/04/2014 NO 5 A0001 01/05/2014 6 A0002 01/05/2014 NO
但我只知道如何编写第一个条件的代码:
UPDATE SERVICE LEFT JOIN WITHDRAW ON SERVICE.PART_ID = WITHDRAW.PART_ID SET SERVICE.WITHDRAWN = "NO" WHERE WITHDRAW.PART_ID Is Null;
有人可以修改我的代码,以便我可以达到目标结果吗?谢谢!
答案 0 :(得分:1)
我认为你要找的是以下问题:
UPDATE service
LEFT JOIN withdraw
ON service.part_id = withdraw.part_id
AND service.service_date <= withdraw.draw_date
SET service.withdrawn = "no"
WHERE withdraw.part_id IS NULL
AND Nz(service.remark, "") <> "scrap";
你的规则有点难以理解,但我想我明白了。我把规则1和2放在一起如下:
1.Part是服务表中的第一次,并且从未出现在WITHDRAW表中。
2.Part表中几次出现服务表和WITHDRAW表,这次已经提供服务,还没有退出。
==&GT;部件的service_date必须大于每个部件的最后一次withdraw_date。