C# 两表比对获取差异的算法

问题描述

DearAll,目前开发有遇到这么一个需求,A表和B表都有栈位和物料两个栏位,现在有需求将A,B两表中相同栈位中不同的物料提取出来,比如对于栈位A1,A有物料,B没有物料,则显示为A1A物料空,若栈位A2,A无物料,B有物料,则显示为A2空B物料,若A3栈位,A有物料且B也有物料,但是两物料不相同,则显示为A3A物料B物料,形如下图目前我的想法是先分别去除A表和B表的所有明细,并且建一张表读取出两个表中所有的栈位信息,再逐行数据进行比对,但是感觉效率很低不知各位有什么好算法,能否给点参考意见呢,先谢过各位了

解决方案

解决方案二:
先排序,再比较,这样只要遍历一次。
解决方案三:
我觉得这个问题数据库处理更方便。fulljoinon栈位。然后外面套多层,用where过滤a=b部分。
解决方案四:
引用2楼smthgdin的回复:

我觉得这个问题数据库处理更方便。fulljoinon栈位。然后外面套多层,用where过滤a=b部分。

+1不用套多层,直接联合查询a,bwherea.栈位=b.栈位anda.单据A!=b.单据B
解决方案五:
引用3楼Z65443344的回复:

Quote: 引用2楼smthgdin的回复:
我觉得这个问题数据库处理更方便。fulljoinon栈位。然后外面套多层,用where过滤a=b部分。

+1不用套多层,直接联合查询a,bwherea.栈位=b.栈位anda.单据A!=b.单据B

但是还有两种情况,A有栈位B没栈位,B有栈位,A没栈位的啊,这个语句就没法筛选了
解决方案六:
引用4楼SanitySun的回复:

Quote: 引用3楼Z65443344的回复:
Quote: 引用2楼smthgdin的回复:
我觉得这个问题数据库处理更方便。fulljoinon栈位。然后外面套多层,用where过滤a=b部分。

+1不用套多层,直接联合查询a,bwherea.栈位=b.栈位anda.单据A!=b.单据B

但是还有两种情况,A有栈位B没栈位,B有栈位,A没栈位的啊,这个语句就没法筛选了

(+)a.栈位=(+)b.栈位应该就可以了吧
解决方案七:
引用5楼Z65443344的回复:

Quote: 引用4楼SanitySun的回复:
Quote: 引用3楼Z65443344的回复:
Quote: 引用2楼smthgdin的回复:
我觉得这个问题数据库处理更方便。fulljoinon栈位。然后外面套多层,用where过滤a=b部分。

+1不用套多层,直接联合查询a,bwherea.栈位=b.栈位anda.单据A!=b.单据B

但是还有两种情况,A有栈位B没栈位,B有栈位,A没栈位的啊,这个语句就没法筛选了

(+)a.栈位=(+)b.栈位应该就可以了吧

加了a.栈位=(+)b.栈位的话,应该是只能筛选出A和B都有的栈位信息,但是A有B无,A无B有的应该还是选不出来吧
解决方案八:
引用6楼SanitySun的回复:

Quote: 引用5楼Z65443344的回复:
加了a.栈位=(+)b.栈位的话,应该是只能筛选出A和B都有的栈位信息,但是A有B无,A无B有的应该还是选不出来吧

能选出来啊,否则加号加了跟没加有任何区别?

时间: 2024-09-29 21:12:01

C# 两表比对获取差异的算法的相关文章

thinkphp多表查询两表有重复相同字段的完美解决方法_php技巧

框架:thinkphp 版本:3.2.3 内容:查询语句 解决问题:重复字段问题 $Data = M('a')->where($where) ->Field('a.name as aname,b.name as uname,a.*') ->join('b on b.jb_id=a.id') ->order('a.id desc') ->select(); 解释:a.* 查询a表所有的字段 a.name as aname 转换a表中的name重复字段为aname 以上就是小编为

php实现两表合并成新表并且有序排列的方法_php技巧

本文实例讲述了php实现两表合并成新表并且有序排列的方法.分享给大家供大家参考. 具体实现方法如下: 复制代码 代码如下: <?php /** la (3,5,8,11) lb(2,6,8,9,11,15) 合并为lc,有序排列. 用php实现,不能用sort之类的函数!!!! **/ class union {     var $lista = array();     var $listb = array();     var $listc = array();          funct

oracle中两表之间值互相插入和表自身插入值

有两张表student和otherStudent,表信息如下 SQL> desc student Name Type         Nullable Default Comments ---- ------------ -------- ------- -------- NUM  NUMBER                                 NAME VARCHAR2(20)                           AGE  NUMBER       Y      

两表连接的SQL语句

两表连接的SQL语句:这两种写法哪种好?现在提倡用哪一种呢? 例如:一个二表连接的SQL,有两种写法: (1)select A.c1,A.c2,B.c1,B.c2 from table1 A,table2 B where A.id=B.id (2)select A.c1,A.c2,B.c1,B.c2 from table1 A join table2 B on A.id=B.id 哪种写法好呢?现在提倡用哪一种? 你喜欢用哪一种? 我习惯用(1) ---这两个哪个好? 其中11楼的回答最为深入.

原生JS实现表单checkbook获取已选择的值

本文为大家介绍下采用原生JS实现从一个表单checkbox获取到已选中的数据值,具体的实现如下,感兴趣的朋友可以参考下哈,希望对大家有所帮助   从一个表单checkbox获取到已选中的数据值: 复制代码 代码如下: <input type="checkbox" name="cb" value="1" />aa <input type="checkbox" name="cb" value=

mysql两表数据匹配,更新结果为什么为0

问题描述 mysql两表数据匹配,更新结果为什么为0 update crm_customerhr_postset crm_customer.beseats_depid=hr_post.dep_idcrm_customer.beseats_depname=hr_post.depnamewhere hr_post.emp_id=crm_customer.BeSeats 解决方案 0就是没有数据更新呗,没有符合条件的数据吧 解决方案二: 字段名合适的没?表里边有没有这些字段

数据库-sql两表联合计算求助~

问题描述 sql两表联合计算求助~ 表一表二如图~现在想写一条sql语句来通过某一人的工作证号,如张三的123,来查出他所有的称号代码也就是4.5.6:然后根据表二的称号代码来查出代码对应的"研究生支持人数"和"研究生支持年限",二者相乘得出一个数,然后将这一个人所有这样两两相乘得出来的数累加起来,得出一个最后结果: 比如我查询张三,他的最后结果就是:1*1+2*3+1*1=8:我查李四的最后结果就是:1*1+2*3+1*1+1*1=9: 大概就是这样,求问sql语

mysql-PHP MYSQL 两表联合查询问题

问题描述 PHP MYSQL 两表联合查询问题 现在有两个表,第一个201411,第二个user_list, 第一个是存放用户相关的数据,第二个是存放登录用户名和密码的信息. 他们有一个共有的字段:username, 现在要如何才能调用和显示在登陆了user_list的账号(username)的201411这张表里面的其他信息. 解决方案 SELECT T2.* FROM user_list T1 INNER JOIN 201411 T2 ON T1.username = T2.username

sql-SQL 两表之间的 left join 为何不按条件筛选

问题描述 SQL 两表之间的 left join 为何不按条件筛选 查询条件如图,为什么会不按 = 'EDM' 条件来筛选?! 解决方案 on 语句反映的关联表之间的联系关系,如果需要单独设置某表的范围,请在句末使用 where 子句 如 and a.GEtype = 'EDM' 换成 where a.GEtype = 'EDM'