其中要求A、B、C、D的所有记录数据都出现在E中

解决方案 »

  1.   

    --AF,BF,CF,DF出现null值要紧吗?象这样SELECT PK,AF,NULL AS BF,NULL AS CF,NULL AS DF FROM A
    UNION ALL
    SELECT PK,NULL AS AF,BF,NULL AS CF,NULL AS DF FROM B
    UNION ALL
    SELECT PK,NULL AS AF,NULL AS BF,CF,NULL AS DF FROM C
    UNION ALL
    SELECT PK,NULL AS AF,NULL AS BF,NULL AS CF,DF FROM D
      

  2.   

    SELECT A.pk AS pk, A.af AS af, B.BF AS bf, C.CF AS cf, D.DF AS df
    FROM A CROSS JOIN
          B CROSS JOIN
          C CROSS JOIN
          D
      

  3.   

    2楼的方法存在一个问题:表A、B、C、D中FK相同的记录没有合并到一起。
    3楼的方法存在一个问题,对于表A不存在的FK,而表B、C或D存在的FK就没有出现在结果集中了,是么
      

  4.   

    我希望得到的是一个全连接,如果A中存在的FK,则取E.FK=A.FK,如果A中不存在此FK,而B、C或D存在,则E.FK=B.FK(或C.FK或D.FK)其实A/B/C/D中的字段都是一个对象的各种属性,现在要将这些属性根据FK值合并到一起
      

  5.   

    select a.*,b.*,c.*,d.* from a
    full outer join b on a.id=b.id
    full outer join c on a.id=c.id
    full outer join d on a.id=d.id
      

  6.   

    SELECT 'A' AS FLAGE,PK,AF,NULL AS BF,NULL AS CF,NULL AS DF FROM A
    UNION ALL
    SELECT 'B',PK,NULL AS AF,BF,NULL AS CF,NULL AS DF FROM B
    UNION ALL
    SELECT 'C',PK,NULL AS AF,NULL AS BF,CF,NULL AS DF FROM C
    UNION ALL
    SELECT 'D',PK,NULL AS AF,NULL AS BF,NULL AS CF,DF FROM D这样就能分的清了
      

  7.   

    我觉得,主要看A、B、C、D4个表格中的‘PK’是不是全等,如其属性一样,那做全连接就没问题。如不一样就做全连接,就会导致数据缺失
      

  8.   

    表A为TABLE20050202_A
    表B为TABLE20050202_B
    表C为TABLE20050202_C
    表D为TABLE20050202_DSQL语句如下:select AllPK.PK, A.AF, B.BF, C.CF, D.DF
    from  (select distinct PK from 
    (select PK from TABLE20050202_A
    UNION ALL
    select PK from TABLE20050202_B
    UNION ALL
    select PK from TABLE20050202_C
    UNION ALL
    select PK from TABLE20050202_D) AllPK1) AllPK
    left join TABLE20050202_A A on A.pk=AllPK.PK
    left join TABLE20050202_B B on B.pk=AllPK.PK
    left join TABLE20050202_C C on C.pk=AllPK.PK
    left join TABLE20050202_D D on D.pk=AllPK.PK
      

  9.   

    在 jinjazz(近身剪(N-P攻略)) 的基础在改了一下
    楼主 看看是不是你想要的
    select PK=(case
      when a.pk is not null then a.pk
        when b.pk is not null then b.pk
      when c.pk is not null then c.pk
      when d.pk is not null then d.pk
       end) ,a.af,b.bf,c.cf,d.df 
    from afull outer join b on a.id=b.id
    full outer join c on a.id=c.id
    full outer join d on a.id=d.id
      

  10.   

    表A为TABLE20050202_A
    表B为TABLE20050202_B
    表C为TABLE20050202_C
    表D为TABLE20050202_DSQL语句如下:select AllPK.PK, A.AF, B.BF, C.CF, D.DF
    from  (select distinct PK from 
    (select PK from TABLE20050202_A
    UNION ALL
    select PK from TABLE20050202_B
    UNION ALL
    select PK from TABLE20050202_C
    UNION ALL
    select PK from TABLE20050202_D) AllPK1) AllPK
    left join TABLE20050202_A A on A.pk=AllPK.PK
    left join TABLE20050202_B B on B.pk=AllPK.PK
    left join TABLE20050202_C C on C.pk=AllPK.PK
    left join TABLE20050202_D D on D.pk=AllPK.PK
    补充说明:
    测试生成资料
    A表中PK为1,2,3,4......50000    (50000以下的资料)
    B表中PK为0,2,4,6......100000   (100000以内偶数的资料)
    C表中PK为1,3,5,7......99999    (100000以内奇数的资料)
    D表中PK为50001,50002,50003,50004......100000  (50000以上100000以内的资料)总共200000笔交叉资料,SQL语句共执行7秒钟,执行结果无误
    机器配置环境(PIII667,256M,Windows2000 Server,SQLServer2000)
      

  11.   

    hongbo163得出的资料中PK会有重复的
      

  12.   

    insert into e(pk,af) select pk,af from a insert into e(pk,bf) select pk,bf from b where pk not in (select pk from e)
    update e set bf = b.bf from a,b where b.pk = e.pkinsert into e(pk,cf) select pk,cf from c where pk not in (select pk from e)
    update e set cf = c.cf from a,c where c.pk = e.pkinsert into e(pk,df) select pk,df from d where pk not in (select pk from e)
    update e set df = d.df from a,d where d.pk = e.pkselect * from e
      

  13.   

    非常谢谢楼上的解答
    Horsezhao与hongbo163的解答都能够达到我的要求!性能方面Horsezhao多了一个查询
    谢谢大家!
      

  14.   

    嗯,刚才测试了一下
    我写的那个还是存在问题的
    horsezhao(horsezhao)的是正确的