SELECT dbo.tb1.username AS u1, dbo.tb2.username AS u2,
dbo.tb3.username AS u3
FROM dbo.tb1 CROSS JOIN
dbo.tb2 CROSS JOIN
dbo.tb3以上视图代码,如果tb1、tb2或tb3中有一个表是空的话,那么就查不到任何记录,请问该怎么修改才可以避免这种问题出现?

解决方案 »

  1.   

    交叉表就是每行进行笛卡儿乘积,你最好用LEFT JOIN,比如TB3是空表,那么就
    SELECT dbo.tb1.username AS u1, dbo.tb2.username AS u2,
    dbo.tb3.username AS u3
    FROM dbo.tb1 CROSS JOIN
    dbo.tb2 LEFT JOIN
    dbo.tb3
      

  2.   

    关键是我不确定哪个表会是空表啊?tb1,tb2,tb3中任何一个表都可能会是空的。如果这样的话,该怎么改呢?
      

  3.   

    那么,可以尝试用存储过程,首先判断哪个表是空的(根据@@rowcount判断),若是空的,则在那个表前面用LEFT JOIN 不就可以了吗?这个要用动态SQL语句写就可以了.暂时没时间写,TRY IT YOURSELF
      

  4.   

    完整外联就是返回左表和右表的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择
    列表包含NULL,否则,整个结果集行包含基表的数据值
      

  5.   

    SELECT dbo.tb1.username AS u1, dbo.tb2.username AS u2,
    dbo.tb3.username AS u3
    FROM dbo.tb1 full outer JOIN
    dbo.tb2 full outer JOIN
    dbo.tb3这样就是全外连接,速度比较慢.呵呵,你想,要把所有表的所有行都关联一遍
      

  6.   

    只需要在字段前面加一个isnull的判断就可以了.