假如有4个表   user  cart   a    b   这些表没有关系
  user表有字段  id  username  pwd   rose 
  cart表有字段  id  title  content  adddate  
   a表有字段    b  c  d
   b表有字段    e  f  g          其中user表跟cart表有数据  a 跟b 表没数据  
   我要实现一个查询  查询前两个表的所有字段,查询a表的 b 字段  b表的 g字段  注意 a表跟b表就算没有数据 但还是要把字段值显示出来
  
   例:
    id  username  pwd    rose   title   content   adddate       b    g
    1  admin    admin   admin   c编程   谭浩强    2010-10-10
    2  a        a       user    c#      c#编程    2010-10-10
  假如b或者g  有值  那么得显示出来
   id  username  pwd    rose   title   content   adddate        b    g
    1  admin    admin   admin   c编程   谭浩强    2010-10-10
    2  a        a       user    c#      c#编程    2010-10-10
    3  b         b       user   c++     C++编程    2011-11-11   a    a
   SELECT  user.id,user.username,user.pwd,user.rose,cart.title, cart.content,cart.adddate,a.b,b.g
FROM      user CROSS JOIN  cart  CROSS JOIN a CROSS JOIN b   (这是本人做的,用做参考,不过这种方法不能把null显示出来,确切的说,加入后面的两个字段,干脆什么都查不出)  求高手指点!

解决方案 »

  1.   

    问题附加:没有 WHERE 子句的交叉联接将产生联接所涉及的表的笛卡尔积。第一个表的行数乘以第二个表的行数等于笛卡尔积结果集的大小  所以我写的查询语句是错误的  怎么没人回帖呢? 是因为太晚了吗?高手都睡了吗?焦急中。。自己先沙发
      

  2.   

    连接a表和b表的时候用left join 试试!
      

  3.   

    select user1.*,a.b,a.c,a.d,b.e,b.f,b.g,title,content,adddate from user1 
    left join 
    cart on user1.id=cart.id
    left join a on a.id=user1.id
    left  join b on b.id=user1.id
    a表和b表加了个id字段
      

  4.   

    四个表的 cross join,如果这些表都有数据,那就会查出一堆糨糊来,不知道楼主要这样查了干什么用.
      

  5.   

    那,建议你对前两个表,用 full join ,对后两个表,用 left join.这样,就算后两表中没有数据,它也会出来的.
      

  6.   

    left join可以查出空值而FULL JOIN 相当于 LEFT JOIN+RIGHT JOIN 楼主可以按照自己的需求去试试CROSS JOIN是迪卡尔积 
      

  7.   

    后面的两个表用left ,空值用 b=isnull(b,''),g=isnull(g,'') 在显示出来的时候处理掉
    当然,如果确实没数据,就不要用后面的表了,b=‘’,g=‘’就解决问题了,或者是'' as b,'' as g,效果一样。