问题描述
在ACCESS中,SQL语句如何实现select一对一匹配数据呢?比如有下面两张表:b1表:t1表:我使用以下的SQL语句:SELECTb1.*,t1.*FROMt1INNERJOINb1ON(t1.单位名称=b1.单位名称)AND(t1.金额=b1.金额)会得到b1表里面的数据重复出现与t1匹配,如下图:图中彩色标注的数据都是重复出现的,我想让b1表里面的某一条数据只能和t1表里面的数据只匹配1次,这样的SQL语句该怎么写呢?求助各位大神帮助
解决方案
解决方案二:
你这个innerjoin逻辑太诡异了吧……
解决方案三:
引用1楼starfd的回复:
你这个innerjoin逻辑太诡异了吧……
用查询设计器生成的SQL,请指点一下
解决方案四:
(t1.单位名称=b1.单位名称)AND(t1.金额=b1.金额)我虽然明白你的意思,但是实际上,这两个条件相等时,单号,时间不同的记录,应该不会只有一条吧你两个表,没关联的主键的么....感觉,你这两个表,根本就没实际的关系...如果你迎要凑一起,只取一条,MSSQL2005以上,那你可以用开窗函数.ACCESS里面,那你少取几个字段,分一下组看看了
解决方案五:
引用3楼yangb0803的回复:
(t1.单位名称=b1.单位名称)AND(t1.金额=b1.金额)我虽然明白你的意思,但是实际上,这两个条件相等时,单号,时间不同的记录,应该不会只有一条吧你两个表,没关联的主键的么....感觉,你这两个表,根本就没实际的关系...如果你迎要凑一起,只取一条,MSSQL2005以上,那你可以用开窗函数.ACCESS里面,那你少取几个字段,分一下组看看了
引用3楼yangb0803的回复:
(t1.单位名称=b1.单位名称)AND(t1.金额=b1.金额)我虽然明白你的意思,但是实际上,这两个条件相等时,单号,时间不同的记录,应该不会只有一条吧你两个表,没关联的主键的么....感觉,你这两个表,根本就没实际的关系...如果你迎要凑一起,只取一条,MSSQL2005以上,那你可以用开窗函数.ACCESS里面,那你少取几个字段,分一下组看看了
其实b1是个银行记录,t1是个开票记录,当b1的单位名称和t1的单位名称相等并且b1的金额和t1的金额相等时,认为这个对账成功了,所以想用这个SQL语句,其他的字段没办法做为对账确认的条件来用,还劳烦您再给个思路
解决方案六:
既然你可以认为,当单位和金额相等,那就OK那你语句就这么写:SELECTb1.ID,b1.金额,b1.单位FROMt1INNERJOINb1ON(t1.单位名称=b1.单位名称)AND(t1.金额=b1.金额)groupbyb1.ID,b1.金额,b1.单位
解决方案七:
不能distinct就用cte,再搭配rownumber函数,取你希望出现的