-
两表连接
2014-06-06 16:55:30#region 两表连接 /// /// 查询两表的集合 /// 使用例子:(可以参考linq join的用法) /// List《dynamic》 Result = basebll_Jyxt.GetJoinList《Sys_User, Sys_User_BC, string, dynamic》(a => a.Guid, g =>#region 两表连接 /// <summary> /// 查询两表的集合 /// 使用例子:(可以参考linq join的用法) /// List《dynamic》 Result = basebll_Jyxt.GetJoinList《Sys_User, Sys_User_BC, string, dynamic》(a => a.Guid, g => g.Guid, /// (a, g) => new {a.Area,a.IsValid,a.UserId,g.Guid, g.GCLB }); /// </summary> /// <typeparam name="TOuter">第一张表对应实体类</typeparam> /// <typeparam name="TInner">第二张表对应实体类</typeparam> /// <typeparam name="TKey">连接的字段的类型</typeparam> /// <typeparam name="TResult">返回的实体类型</typeparam> /// <param name="outerKeySelector">第一张表对应的连接字段</param> /// <param name="innerKeySelector">第二张表对应的连接字段</param> /// <param name="resultSelector">需要查询的字段</param> /// <param name="IsLeftJoin">是否left join,true表示left join,false表示inner join</param> /// <returns>结果实体</returns> public List<TResult> GetJoinList<TOuter, TInner, TKey, TResult>(Expression<Func<TOuter, TKey>> outerKeySelector, Expression<Func<TInner, TKey>> innerKeySelector, Expression<Func<TOuter, TInner, TResult>> resultSelector, Boolean IsLeftJoin) where TOuter : class where TInner : class where TResult : class { using (SysDb<TOuter, TInner> db = new SysDb<TOuter, TInner>(strConn)) { if (IsLeftJoin) { return db.Set<TOuter>().LeftOuterJoin(db.Set<TInner>(), outerKeySelector, innerKeySelector, resultSelector).ToList(); } else { return db.Set<TOuter>().Join(db.Set<TInner>(), outerKeySelector, innerKeySelector, resultSelector).ToList(); } } }
调用
List<dynamic> Result = basebll_Jyxt.GetJoinList<Sys_User, Sys_User_BC, dynamic, dynamic> ((a => new { a.Guid, a.UserId }), (g => new { g.Guid, UserId = g.UserIdBcId }), (a, g) => new { a.Area, a.IsValid, a.UserId, g.Guid, g.GCLB }, false);
-
python两表连接数据处理的小技巧--merge
2017-10-23 10:27:08python两表连接数据处理的小技巧merge python环境创建 本地读取python两表连接数据处理的小技巧–merge 今天在工作的时候, 碰到两个表需要做连接, 很简单的问题, pd.merge就可以解决问题. 但是在检查数据的时候却...python两表连接数据处理的小技巧–merge
今天在工作的时候, 碰到两个表需要做连接, 很简单的问题,
pd.merge
就可以解决问题. 但是在检查数据的时候却发现很多没有merge上, 明明要连接的字段在两个表中都有记录, 为什么merge出来的结果有缺失呢?仔细检查数据才发现, 有些数据字段是以0开头的, 例如0021
等. python在读取这些数据的时候会忽略掉最前面的多个0, 所以会出现上述情况? 这个问题该怎么处理? 其实很简单,
code
最容易直观说明与解决问题了.1. python环境创建
data1 = pd.DataFrame({'id': ['001','002','031','421'], 'name':['alice','bruce','cook','daisy']}) data1
Out[1]:
id name 0 001 1 002 2 031 3 421 data1.dtypes
Out[2]:
id object name object dtype: object
data2 = pd.DataFrame({'id': ['001','002','031'], 'label':[1,2,3]}) data2
Out[3]:
id label 0 001 1 002 2 031 merge_data1 = pd.merge(data1, data2, on='id',how='left') merge_data1
Out[4]:
id name label 0 001 alice 1 002 bruce 2 031 cook 3 421 daisy 2. 本地读取
这个输出没有什么问题, 和预想的结果保持一致;
接着, 我们创建两个临时数据
data1
和data2
, 然后我们另存, 改为从本地读取文件, 看看是什么效果.temp1 = pd.read_csv('./data/test1019/data1.txt') temp1
Out[5]:
id name 0 1 1 2 2 31 3 421 temp2 = pd.read_csv('./data/test1019/data2.txt',dtype={'id':np.str}) temp2
Out[6]:
id label 0 001 1 002 2 031 merge_data2 = pd.merge(temp1, temp2, on='id',how='left') merge_data2
Out[7]:
id name label 0 1 alice 1 2 bruce 2 31 cook 3 421 daisy 比较理想的结果是: python将两个文件中所有以
0
打头的字段都忽略掉, 这样标准一样, merge的结果还是一致的. 不理想的结果, 就如
merge_data2
的结果,python
将temp1
的id
字段中的0忽略掉, 但是temp2
的id
字段中的0还是正常显示, 这样就会造成结果输出与预想的不一致, 导致后续所有的结果都是错的. 那么问题来了, 像这种小量的数据, 我们能直接观察到数据读写的问题, 如今大数据时代, 我们该如何规避此类问题呢? 在上面的代码中, 已经给出了一种解决方案.
#方案1: 使用lambda函数 temp3 = pd.read_csv('./data/test1019/data1.txt',converters={'id': lambda x: str(x)}) temp3
Out[8]:
id name 0 001 1 002 2 031 3 421 #方案2: 使用dtype对特定列进行制定数据类型 temp4 = pd.read_csv('./data/test1019/data2.txt',dtype={'id':np.str}) temp4
Out[9]:
id label 0 001 1 002 2 031 merge_data3 = pd.merge(temp3, temp4, on='id',how='left') merge_data3
因此, 为了保证数据原有的格式, 对一些会被各种编程语言特殊处理掉的数据, 一定要先声明数据类型.
本文为博主原创文章,未经博主允许不得转载
如若转载, 请注明出处
-
用函数实现两表连接
2012-03-13 17:05:56用函数实现两表连接 源明:用VLOOKUP()函数也可以获取两表之间的数据 锦绣:嗯? 源明:打开总公司的表,B2单元格写公式= VLOOKUP(B2,工资详单!$A:$B,2,0),点“确定”即可写入工资数 锦绣:这样就一步到位了...用函数实现两表连接
源明:用VLOOKUP()函数也可以获取两表之间的数据
锦绣:嗯?
源明:打开总公司的表,B2单元格写公式= VLOOKUP(B2,工资详单!$A:$B,2,0),点“确定”即可写入工资数
锦绣:这样就一步到位了?
源明:对。
锦绣:VLOOKUP()好像是个查找函数
源明:其它的查找函数也可以进行两表之间的数据交换。
锦绣:数据交换?
源明:你看啊,数据表和数据表之间往往要发生联系的,比如现在你的表和总公司的表,要挑出工资数,就必须通过这两个表的“姓名”对应起来,那么“姓名”这一列就是公共数据列,通过公共数据列就可以将两个表的数据连接起来
锦绣:你有开始空讲理论了,一讲这些俺更糊涂了
源明:算啦,不说了,知道你听不懂
-
数据整合sql两表连接
2019-04-24 12:37:01纵向连接表 集合查询—并、交、差 将两张表中的记录看作一个集合,则 并集是两张表中重复的记录只保留一份,不重复都保留 交集是只保留一份重复的记录 差集是只保留表1中不重复的记录保留 SQL 操作会生成一个...纵向连接表
集合查询—并、交、差
将两张表中的记录看作一个集合,则
- 并集是两张表中重复的记录只保留一份,不重复都保留
- 交集是只保留一份重复的记录
- 差集是只保留表1中不重复的记录保留
SQL 操作会生成一个中间表(intermediate result set)
注意,union后面没有跟随all选项,因此剔除重复值
最后结果
横向连接表
- 交叉连接(cross join,笛卡尔乘积):查询结果包括两张表观测的所有组合情况,这是SQL实现两表合并的基础,但是极少单独做这种操作
- 内连接(inner join):查询结果只包括两张表向匹配的观测,用法简单,但是在数据分析中谨慎使用,因为会造成样本的缺失
- 外连接(outer join)包括左连接、右连接,全连接
笛卡尔积
内连接
内连接在笛卡尔积基础之上加入了连接条件,其实就是限制条件,这类似单表操作中对观测进行筛选
左连接
左连接等价于两部分的叠加:内连接+左表中没有匹配的观测
右连接
等价于两部分的叠加:内连接+右表中没有匹配的观测
全连接
全连接等价于三部分的叠加:内连接+左表中没有匹配的观测+右表中没有匹配的观测
-
DataFrame实现两表连接
2018-03-29 21:32:34pandas的DataFrame的连接不算真正意义的连接查询,只是在两个DataFrame中的操作达到了像连接查询的效果用pandas库下的DataFram创建DataFrame类型的数据other = pd.DataFrame({'key': ['K0', 'K1', '... -
Oracle 执行计划(3)-两表连接基数
2012-04-21 16:27:45Oracle 执行计划(3)-两表连接基数 1 公式: 基数= 连接选择率*过滤条件1基数+过滤条件2的基数连接选择率=((num_rows(表1)-num_nulls(表1连接字段))/num_rows(表1))*((num_rows(表2)-num_nulls(表2连接字段))/... -
mysql两表连接查询
2017-09-11 13:57:31有两张表:employee 表department 表要求找出每个部门工资最高的人的 姓名、所在部门、工资。查询结果如图,sql语句为:select department.name Department,employee.name Employee,max(salary) Salary from ... -
关于两表连接问题sql 如何形成新表
2017-08-11 01:44:56我有表A 格式如下 | id | value | | 1 | A | | 2 | A | | 3 | A | 表B id | value | | 5 | B | | 6 | B | | 4 | B | ...表A与B连接 怎样写sql才能形成如下表结构 id value 1 A 2 A 3 A 4 B 5 B 6 B -
row_number() over 两表连接分页SQL 一对多的表关系 去重
2014-09-11 16:16:02row_number() over 两表连接分页SQL语句 row_number() over 分页不排序 一对多的表关系 去重 -
oracle两表连接查询问题
2015-11-20 15:45:48有两张表,一张是个人信息表包括考生姓名,年龄,性别等一系列个人信息和一些其他信息; 第二张表是成绩表,其中也包括部分考生信息和分数; 现在想要在打开成绩表的时候,个人信息字段就已经对应上第一张表了,不... -
想请教个sql问题,两表连接查询
2017-08-13 14:55:59事情是这样的,任务表和计划表,一个计划里含有很多的任务。 我想实现的是,根据任务名称,查出含有该任务的计划。 但是问题来了,如果一个计划中有两个任务都符合条件,那么查出的计划会重复,请大神给我解决一下这... -
asp sql两表连接查询
2014-03-18 17:14:27懂的sql语句就可以快速查找出我们需要的数据,不然就要嵌套一层又一层,以前很少用连接语句来查询数据,经常要建立俩个rrs记录集,这样其实效率也 -
想请教个两表连接的查询问题,sql
2017-08-13 15:09:53上述sql,任务表和计划表,一个计划存在多个任务。 我要根据任务名称,查出计划表中含有该任务名称的数据,当一个计划中有多个任务符合条件时,查询出的数据会像上面那样出现重复数据,怎样能查出来不重复呢。。。... -
oracle两表连接多个结果集合成一列
2017-08-31 13:07:25举个例子: 每个合同可能会有很多的附件 拿到合同 然后 同时看到所有的附件名称 sql语句: select s.*,(select wm_concat(sa.name) from samples sa where...suits代表合同表,samples代表附件表,两表关系sa.su -
sql sever2000 两表连接 请看下图信息
2017-11-20 03:47:34 -
两表连接视图,只查询一个表
2014-02-23 17:58:23要视图中有表连接,查询视图必然引起表连接,但今天才知道创建主键以及外键约束,oracle可以只查 询某一张表(如果查询的数据只在这张表中) ---创建实验表 RUDY@linux_orcl>create table t1 as ... -
hibernate的原生sql两表连接
2011-03-02 19:34:00前几天,做一个复杂sql的时候,一直报错未知的cols,所以一直以为hibernate会对原生sql进行处理的,今天测试两个表的连接的时候,又用了原生sql tring subhql ="select nmenu.id,submenu.pid from menu_... -
R语言中两表连接且输出不重复数据
2017-07-18 13:12:02另外一张member表中包含会员ID以及会员电话信息,但是这张表有重复的会员信息,也就是说一个会员在member表中多次出现,memeber表比整理的表要大很多。 说明: 1.在项目过程中,数据量较大,用到的是data.table包...
-
【布道者】Linux极速入门
-
基于电商业务的全链路数据中台落地方案(全渠道、全环节、全流程)
-
《文件过滤及内容编辑处理命令》
-
jq手风琴案例
-
一键部署JDK+Tomcat+jenkins
-
一起学python
-
FileXor.zip
-
rereschrome.zip
-
1.4: 归档及压缩 、 重定向与管道操作 、 find精确查找 、 vim高级使用(1).docx
-
小型在线聊天室php版
-
《python数据分析与数据化运营》5.rar
-
微信小程序注册流程
-
C/C++:八皇后问题.rar(含完整注释)
-
denoise_NLM.py
-
华为1+X——网络系统建设与运维(中级)
-
闲的无聊做的试验
-
2.1: 基本权限和归属 、 附加权限 、 ACL策略管理.docx
-
Java线程池
-
C/C++:算术表达式求值问题.rar(含完整注释)
-
零基础一小时极简以太坊智能合约开发环境搭建并开发部署