有三张表  
 PROCESS 加工表 PK(product_order ,  serial ,    process)   (主表)product_order   serial    process  proc_code 
P00000001       00000001    1      0001
P00000006       00000006    1      0003 
task 表:pk(tsk_code)
tsk_code tsk_name ,proc_code(唯一) 
1         task1    0001
2         task2    0002
work_plan 作业预定表  (product_order ,  serial ,    process)
product_order   serial    process   tsk_code
P00000001       00000001     1       1
P00000002       00000002     2       1
P00000003       00000003     1       1
P00000004       00000004     1       1
P00000005       00000005     1       2结果数据:
product_order   serial    process   tsk_code
P00000006       00000006     1      NULL
P00000001       00000001     1       1
P00000005       00000005     1       2解释:  PROCESS 加工表  和 work_plan 作业预定表 根据 tsk_code 进行全外连接 ,但是在PROCESS 加工表里面没有tsk_code ,所以通过第三张表task 表中的proc_code 找到对应的tsk_code 进行关联,而且 PROCESS 加工表  和 work_plan 作业预定表中的 product_order  和  serial    要相同

解决方案 »

  1.   

    你要的结果数据就这三行吗,没看出规律来啊
    product_order  serial    process  tsk_code 
    P00000006      00000006    1      NULL 
    P00000001      00000001    1      1 
    P00000005      00000005    1      2 
      

  2.   

    结果是三表连接关联查询tsk_code相同的最小记录?
    SQL server的写法。。
    --Code
    --Code
    ;with tmp as
    (
    select 
    a.[product_order],a.[serial],a.[PROCESS],d.[tsk_code]
    from
    (
    select [product_order],[serial],[PROCESS] from [work_plan]  
    union 
    select [product_order],[serial],[PROCESS] from [PROCESS] 
    ) a 
    left join [PROCESS] b on a.[product_order]=b.[product_order] and a.[serial]=b.[serial]
    left join  [task] c on b.[proc_code]=c.[proc_code]
    left join  [work_plan] d on a.[product_order]=d.[product_order] and a.[serial]=d.[serial]
    )select a.* from tmp a 
    join
    ( select min([product_order]) as [product_order] from tmp group by [tsk_code]) b
    on a.[product_order]=b.[product_order]--Drop
    drop table [PROCESS]
    drop table [task]
    drop table [work_plan]
    --Result
    /*
    product_order serial   PROCESS     tsk_code
    ------------- -------- ----------- -----------
    P00000001     00000001 1           1
    P00000005     00000005 1           2
    P00000006     00000006 1           NULL
    */
      

  3.   

    select a.product_order,a.serial,a.process
    from task  b ,work_plan c,PROCESS a where a.proc_code=b.proc_code and b.tsk_code=c.tsk_code(+) and a.product_order=c.product_order(+) and a.serial=c.serial(+)外连接的方向不一定对 因为我没完全理解你的业务逻辑
      

  4.   

    我是这样写的:
    SELECT  a.* ,b.* ,c.*
    FROM  
    T_WORK_PLAN c  FULL OUTER JOIN   VW_TSK b  on 
    (c.tsk = b.tsk and   
    a.product_order =  c.product_order AND
    a.SERIAL = c.SERIAL
     ) ,
    T_PROCESS_RESULT a 
    WHERE  
    a.PRODUCT_ORDER ='P00000001' AND
    b.proc_code = a.proc_code