求教一delete语句

cyxin2121921 2009-10-29 12:03:55
我是通过比较两个表的纪录,然后保存到第三个表中的操作,具体操作看http://topic.csdn.net/u/20091012/10/34b18e8a-bd0c-4c73-ab28-3f662b4cb1a7.html 十一楼的方法
由于这里面是通过full join操作后
比如
对于 a表中的
物料编码 部门
1001 钢结构分厂
1001 木配件
b表中的
1001 钢结构分厂
1001 木配件
导入后的结果是
物料编码_a 部门_a 物料编码_b 部门_b
1001 钢结构分厂 1001 钢结构分厂
1001 钢结构分厂 1001 木配件
1001 木配件 1001 钢结构分厂
1001 木配件 1001 木配件
如果他们之间进行比较的话,其实只是比较同一物料编码下的部门相同的纪录进行比较
按照上面的要求的话
其实应该是这样的一个比较结果
物料编码_a 部门_a 物料编码_b 部门_b
1001 钢结构分厂 1001 钢结构分厂
1001 木配件 1001 木配件

所以我想使用 这样的思路
delete from table where 部门_a<>部门_b and (count(材料编码_a)>1 or count(材料编码_b)>1)
但是执行起来是不对的
这样去删除不应该比较的那些情况
请问我的这个delete方法该如何改变成为正确的呢?
...全文
97 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
wwwwb 2009-10-29
  • 打赏
  • 举报
回复
其实只是比较同一物料编码下的部门相同的纪录进行比较
为什么没有 这条
1001 木配件 1001 钢结构分厂
wwwwb 2009-10-29
  • 打赏
  • 举报
回复
贴全你的记录直观一些,结果也贴出来
cyxin2121921 2009-10-29
  • 打赏
  • 举报
回复
物料编码 部门
1001 钢结构分厂
1001 木配件
1002 钢结构分厂
b表中的
1001 钢结构分厂
1001 木配件
1002 木配件
导入后的结果是
物料编码_a 部门_a 物料编码_b 部门_b
1001 钢结构分厂 1001 钢结构分厂
1001 钢结构分厂 1001 木配件
1001 木配件 1001 钢结构分厂
1001 木配件 1001 木配件
1002 钢结构分厂 1002 木配件

如果他们之间进行比较的话,其实只是比较同一物料编码下的部门相同的纪录进行比较
按照上面的要求的话
其实应该是这样的一个比较结果
物料编码_a 部门_a 物料编码_b 部门_b
1001 钢结构分厂 1001 钢结构分厂
1001 木配件 1001 木配件
1002 钢结构分厂 1002 木配件
cyxin2121921 2009-10-29
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wwwwb 的回复:]
记录贴完整,要求结果贴出来,与你1楼的结果矛盾
[/Quote]
对于一个记录而言,它存在a、b表中的话,只是它们的部门不一致的话 是应该保留在我的记录中的
这样就可以判断出 部门不一致
而对于一个物料编码而言 在a、b表中存在多余一条的情况下,就需要是加上部门进行区分,显示结果的话 就是相同物料编码,在部门相同的情况下的一种比较结果(这个就是一楼中表现出来的情况)
WWWWA 2009-10-29
  • 打赏
  • 举报
回复
感觉你要分两步,一种是
SELECT * FROM LSB WHERE 物料编码_a=物料编码_b AND 部门_a=部门_b
SELECT * FROM LSB WHERE 物料编码_a=物料编码_b AND 部门_a<>部门_b
wwwwb 2009-10-29
  • 打赏
  • 举报
回复
记录贴完整,要求结果贴出来,与你1楼的结果矛盾
ACMAIN_CHM 2009-10-29
  • 打赏
  • 举报
回复
哦,应该是<>

DELETE FROM LSB WHERE 物料编码_a <> 物料编码_b
ACMAIN_CHM 2009-10-29
  • 打赏
  • 举报
回复
[Quote]导入后的结果是
物料编码_a 部门_a 物料编码_b 部门_b
1001 钢结构分厂 1001 木配件
这样的记录应该是保存的
[/Quote]
DELETE FROM LSB WHERE 物料编码_a= 物料编码_b
cyxin2121921 2009-10-29
  • 打赏
  • 举报
回复
但是还有这样一种情况
就是
对于 a表中的
物料编码 部门
1001 钢结构分厂
b表中的
1001 木配件
导入后的结果是
物料编码_a 部门_a 物料编码_b 部门_b
1001 钢结构分厂 1001 木配件
这样的记录应该是保存的
如果是DELETE FROM LSB WHERE 物料编码_a= 物料编码_b AND 部门_a <> 部门_b 这样的语句的话
上面本应该存在的记录 就不能存在我需要的表中了
WWWWA 2009-10-29
  • 打赏
  • 举报
回复
要判断两个字段,物料编码、部门
wwwwb 2009-10-29
  • 打赏
  • 举报
回复
两种方法
1、在生成的时候进行判断;
2、
SELECT * FROM LSB WHERE 物料编码_a= 物料编码_b AND 部门_a=部门_b INTO CURS DD
OR
DELETE FROM LSB WHERE 物料编码_a= 物料编码_b AND 部门_a<>部门_b



WWWWA 2009-10-29
  • 打赏
  • 举报
回复
不知道你是否要以行号匹配还是凑巧是这个结果
select * from (
select *,recn() as jl from a) a1
left join
(
select *,recn() as jl from b) a2
on a.jl=b.jl
wwwwb 2009-10-29
  • 打赏
  • 举报
回复
vfp9:
SELECT a.*, b.*;
FROM ((SELECT * from ..\ba1;
union ;
select * from ..\bb1) AS a LEFT JOIN ..\bA1 AS b ON (a.物料编码=b.物料编码) AND (a.部门=b.部门)) LEFT JOIN ..\bb1 AS c ON (a.部门=c.部门) AND (a.物料编码=c.物料编码);
WHERE b.物料编码 is not null and c.物料编码 is not null ;
union ;
SELECT a.*, c.*;
FROM ((SELECT * from ..\ba1;
union ;
select * from ..\bb1) AS a LEFT JOIN ..\bA1 AS b ON (a.物料编码=b.物料编码) AND (a.部门<>b.部门)) LEFT JOIN ..\bb1 AS c ON (a.部门<>c.部门) AND (a.物料编码=c.物料编码);
WHERE b.物料编码 is null;
ACMAIN_CHM 2009-10-29
  • 打赏
  • 举报
回复
看来楼主是以行号在匹配比较?

这样,建议你在两表添加个行号字段。

2,722

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧