关于笛卡尔乘积问题
在A\B两表之间复--意思就是说如果A表有一条记录,而B表有相同的2条,则只能选B表的一条。
同样的如果A表有3条,而B表有2条,则只能选AB表一样的A表的两条和B表的两条,这是和对账情况一样,希望个为能给出好的数据库实现,或好的方法
A table                          b     table
aid 日期 b金额 a方向 bid 日期 b金额 b方向    
10 2003 10  1 21 2003 10 1
11 2003 -10  1 22 2003 10 -1
12 2004 10  1 23 2003 10 1
13 2003 11  1 24 2003 11 1
希望查询出的数据为
aid bid 日期 a金额 a方向 b金额 b方向
10 21 2003 10  1 10 1
11 22 2003 -10  1 10 -1
13 24 2003 11  1 11 1
根据日期以及金额方向查询,方向相反而且金额的方向也相反,就认为是相同的

解决方案 »

  1.   

    如果A表没有重复,首先先把B表重复的滤掉,再inner join
      

  2.   

    select * from a,(select max(bid),日期,b金额,b方向 from b group by 日期,b金额,b方向) tb where a.日期=b.日期 and sign(a.金额)=b.b方向;
      

  3.   

    没有看明白,为什么a表中的aid为10,和12的要删掉一条哦?
        多写几行出来吧
      

  4.   

    只是为了表名aid和bid是不等的,但是在各自的表中又是唯一的,AB表不一定那一个的相同的数量多
      

  5.   

    三个问题:
    1。“意思就是说如果A表有一条记录,而B表有相同的2条,则只能选B表的一条。
    同样的如果A表有3条,而B表有2条,则只能选AB表一样的A表的两条和B表的两条”
        这句话中的“而B表有相同的2条”,此“相同”是否为楼主最后定义的“相同”?
    2。还是上面那句话。“只能选AB表一样的A表的两条和B表的两条”,选了两条怎么办?这两个两条都“相同”么?如何进行查询结果的匹配?
    3。数据量“特别大”是多大?这恐怕是最重要的问题了。