有三张表
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 要相同
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 要相同
解决方案 »
- 什么是oracle企业管理器的独立部署模式和分布式部署模式?
- Oracle11g R2安装出现问题
- oracle 执行计划!
- oracle9i enterprise manager console为什么登陆不了
- COUNT(*) 结果为空
- 希望各位大虾帮下忙,写个sql语句
- oracle的D:\oracle\ora81\sqlplus\demo目录下的例子执行为什么会出错,怎么解决
- [初学ORACLE] C语言连接数据库程序编译不通过!
- expdp导出表停止不动
- 求助Windows2008 下的Oracle :em-application.log文件过大,可以删除吗?
- 触发器问题 oracledbalgtu哥请进
- (ora+c#) 一个关于单引号的问题
product_order serial process tsk_code
P00000006 00000006 1 NULL
P00000001 00000001 1 1
P00000005 00000005 1 2
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
*/
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(+)外连接的方向不一定对 因为我没完全理解你的业务逻辑
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