预算表 bgdata
id 预算金额bgvalue  实际发生额bgactual  预算项目bgitemid
1 23 10      1
2 40 11 1
3 50 22 1
4 30 9 2
5 22 10 2预算控制记录 bgctrlrecord
id  bgdataid(预算表id)  billid(单据id)
1 1 001
2 2 001
3 3 001
4 4 002
5 5 002单据表头表 bill
id  billnum(单据编号)  billername(填写人姓名)
001 xx1 张三
002     xx2 李四单据表体billentry
id  billid  purpose(费用用途)  aomunt(费用金额)  bgitemid
1    001      差旅费1月              10           1
2    001      差旅费2月  11      1
3    001      差旅费3月  22      1
4    002      书费1                   9       2
5    002      书费2           10            2预算项目id
id   name
1    差旅费
2    书费要求查询结果:
itemname    bgactual   billnum     billername   purpose
 差旅费       10         xx1          张三       差旅费1月
 差旅费       11         xx1          张三      差旅费2月
 差旅费       22         xx1          张三       差旅费3月
 书费          9         xx2          李四        书费1
 书费         10         xx2          李四        书费2我的查询语句是select bgitem.name , bgdata.bgactual , bill.billnum , bill.billername
from bgdata 
  inner join bgctrlrecord
on bgctrlrecord.bgdataid = bgdata.id
  left outer join bgitem
on bgitem.id = bgdata.bgitemid
  lett outer join bill
on bill.id = bgctrlrecord.billid可以查出我想要结果的前四列。可是当我想取出billentry中的purpose字段的时候需要连接billentry表,在连接billentry表以前有已经有每个单据id对应多条记录,如果连接billentry表只能通过billid这个字段连接,此时会出现数据错误。本来xx1单据对应只有三条记录,再连接到billentry中取出相对应的purpose字段会对应3*3=9条记录,请问如何解决这个问题?

解决方案 »

  1.   

    楼上的 billentry.id和bgdata.id根本没有对应关系。billentry表之和bill表有对应~~~我的预算表是独立开来的,只记录了一些预算发生的金额数据。但是现在需要把单据体也就是billentry表中的purpose字段取出。还有什么方法没有?
      

  2.   

    额,知道关系了,加上bgctrlrecord.billid=billentry.billid
      

  3.   

    楼上的。谢谢回复。那样没用的 因为在连接billentry之前 就已经有一个billid对应多条金额的记录了。billid又和billentry是一对多关系,所以再连接billentry表通过billid去连接的话 前面的每条记录又会多对应每一条billentry中的值。这样的数据不仅重复严重 而且 还不正确~~