有三张表:a ,b ,c a: bill_id,bill_no,a_id,c_id,BILL_TYPE
b:b_id,id,qty,price
c:c_id,id,qty,price想得到如下结果:三表联合查询
结果:bill_no,b_id,id,qty,price,c_id,id,qty,price
其中:同一个bill_id 中,b,c行数可能不同,b,c中不足的行用NULL补齐。
select
a.bill_no,
b.b_id,b.id,b.qty,b.price,
c.c_id,c.id,c.qty,c.price
from a
left join b on(a.a_ID=a.BILL_ID)
left join c on(c.c_id=a.bill_id)
where isnull(a.BILL_TYPE,'')='INV016'
order by bill_no
上边的查询后,会出现笛卡尔积的结果,这种情况如何避免???哪位高手指点下!
b:b_id,id,qty,price
c:c_id,id,qty,price想得到如下结果:三表联合查询
结果:bill_no,b_id,id,qty,price,c_id,id,qty,price
其中:同一个bill_id 中,b,c行数可能不同,b,c中不足的行用NULL补齐。
select
a.bill_no,
b.b_id,b.id,b.qty,b.price,
c.c_id,c.id,c.qty,c.price
from a
left join b on(a.a_ID=a.BILL_ID)
left join c on(c.c_id=a.bill_id)
where isnull(a.BILL_TYPE,'')='INV016'
order by bill_no
上边的查询后,会出现笛卡尔积的结果,这种情况如何避免???哪位高手指点下!
如果不想这样,只能是一对一或者一对多的连接
如要求qty和price都相等的情况下,可以这样写:
select
a.bill_no,
b.b_id,b.id,b.qty,b.price,
c.c_id,c.id,c.qty,c.price
from a
left join b on(a.a_ID=a.BILL_ID)
left join c on(c.c_id=b.bill_id and b.qty=c.qty and c.price=b.price)
where isnull(a.BILL_TYPE,'')='INV016'