create view v_test
as
select a.billno,sum(b.num) as AllNum,sum(b.num*b.price) as AllSum
from mastertable a left join detailtable b
on a.billno=b.billno
group by a.billno
go

解决方案 »

  1.   

    create view viewBill
    as
    select a.billno,sum(b.num) as AllNum,sum(b.num*b.price) as AllSum
    from mastertable a left join detailtable b
    on a.billno=b.billno
    group by a.billno
    go
      

  2.   

    create view viewBill
    as
    select a.billno,sum(b.num) as AllNum,sum(b.num*b.price) as AllSum
    from mastertable a Inner join detailtable b
    on a.billno=b.billno
    group by a.billno
      

  3.   

    结果都一样可以得到,但是这2个方法有什么区别呢?left join Inner Join??
      

  4.   

    left join 被SQLServer 改成了 LEFT OUTER JOIN 为什么呢?
      

  5.   

    Re:左外联接 和 内联接有什么区别?
    书上说的:
    内联接(典型的联接运算,使用像 = 或 <> 之类的比较运算符)。包括相等联接和自然联接。 
    内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行。例如,检索 students 和 courses 表中学生标识号相同的所有行。外联接。外联接可以是左向外联接、右向外联接或完整外部联接。 
    在 FROM 子句中指定外联接时,可以由下列几组关键字中的一组指定:LEFT JOIN 或 LEFT OUTER JOIN。 
    左向外联接的结果集包括 LEFT OUTER 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。RIGHT JOIN 或 RIGHT OUTER JOIN。 
    右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。FULL JOIN 或 FULL OUTER JOIN。 
    完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。交叉联接。 
    交叉联接返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉联接也称作笛卡尔积
    其实就是:
    TableName1 LEFT JOIN  TableName2 on ........
    就是 ,TableName1 中全部的记录去匹配TableName2 中的记录
    TableName1 RIGHT JOIN  TableName2 on ........
    就是 ,TableName2 中全部的记录去匹配TableName1 中的记录tablename1 :  id      name 
      1        a
      2        b
      3        ctablename2 :
      tid      Tel
      1       3570388select TableName1.id,TableName1.name,TableName2.tel    from TableName1 LEFT JOIN  TableName2 on TableName1.id=TableName2.tid
      id       name        tel
      1        a           3570388
      2        b           null
      3        c           null