-------------------------
SELECT * FROM (SELECT T.DEVICE_NUMBER,T.ORD_PROV_ID,T.CHANNEL_ID,T.OPERATE_TYPE,T.MAIN_PROD_ID,T.CURR_PROD_ID,T.ORDER_PROD_ID,T.SERVICE_TYPE,T.PAY_MODE
FROM ZB_SRC.ZB_D_ECDWAL04001_000 T ) A, ECS_MB_FLUXPACK B
WHERE A.SERVICE_TYPE =B.SERVICE_TYPE
AND A.CURR_PROD_ID = B.FLUXPACK_NO(+)
AND B.FLUXPACK_NO IS NULL;---------------------------
SELECT * FROM (SELECT T.DEVICE_NUMBER,T.ORD_PROV_ID,T.CHANNEL_ID,T.OPERATE_TYPE,T.MAIN_PROD_ID,T.CURR_PROD_ID,T.ORDER_PROD_ID,T.SERVICE_TYPE,T.PAY_MODE
FROM ZB_SRC.ZB_D_ECDWAL04001_000 T) A, ECS_MB_FLUXPACK B
WHERE A.SERVICE_TYPE =B.SERVICE_TYPE
AND A.ORDER_PROD_ID = B.FLUXPACK_NO(+)
AND B.FLUXPACK_NO IS NULL;
红色的是表ZB_SRC.ZB_D_ECDWAL04001_000的两个字段 需要关联一下ECS_MB_FLUXPACK表中的FLUXPACK_NO有没有一种可能将这两种查询和在一起 不用 union all 谢谢
SELECT * FROM (SELECT T.DEVICE_NUMBER,T.ORD_PROV_ID,T.CHANNEL_ID,T.OPERATE_TYPE,T.MAIN_PROD_ID,T.CURR_PROD_ID,T.ORDER_PROD_ID,T.SERVICE_TYPE,T.PAY_MODE
FROM ZB_SRC.ZB_D_ECDWAL04001_000 T ) A, ECS_MB_FLUXPACK B
WHERE A.SERVICE_TYPE =B.SERVICE_TYPE
AND A.CURR_PROD_ID = B.FLUXPACK_NO(+)
AND B.FLUXPACK_NO IS NULL;---------------------------
SELECT * FROM (SELECT T.DEVICE_NUMBER,T.ORD_PROV_ID,T.CHANNEL_ID,T.OPERATE_TYPE,T.MAIN_PROD_ID,T.CURR_PROD_ID,T.ORDER_PROD_ID,T.SERVICE_TYPE,T.PAY_MODE
FROM ZB_SRC.ZB_D_ECDWAL04001_000 T) A, ECS_MB_FLUXPACK B
WHERE A.SERVICE_TYPE =B.SERVICE_TYPE
AND A.ORDER_PROD_ID = B.FLUXPACK_NO(+)
AND B.FLUXPACK_NO IS NULL;
红色的是表ZB_SRC.ZB_D_ECDWAL04001_000的两个字段 需要关联一下ECS_MB_FLUXPACK表中的FLUXPACK_NO有没有一种可能将这两种查询和在一起 不用 union all 谢谢
解决方案 »
- the account is locked什么原因造成
- 求一条sql语句
- 特急!高分求解!在线等待!---我在ORACLE8.1.7中提交了一个作业(用DBMS_JOB.SUBMIT())每一分钟执行一次,没有编译错误,但表中就是没
- 比较难搞的SQL语句
- Oracle安装后,怎么创建数据库和相关权限的用户?
- 帮我看看函数错误
- 急,请问这个错误是什么意思?
- 我最近下了个oracle form 6i(fm6)安装后老是连不上服务器,请问fm6可以连oracle 9i吗,能开发web程序吗?
- ★★★急急急,各位大虾,怎么判断一个字符串是不是日期,有函数吗???
- 一个相当难的问题,高手请进(欢迎在线讨论)
- cmd命令导出oracle数据库出错
- 数据库行列转换问题
1,SELECT的字段中,没有B表的字段,所以
A.CURR_PROD_ID = B.FLUXPACK_NO(+)及
A.ORDER_PROD_ID = B.FLUXPACK_NO(+)
这两个条件没有意义,除非你要显示空记录。2,使用UNION ALL 可能出现完全重复的记录。
如果希望得到的是 UNION 的效果(重复记录合并)如下SQL。SELECT T.DEVICE_NUMBER,
T.ORD_PROV_ID,
T.CHANNEL_ID,
T.OPERATE_TYPE,
T.MAIN_PROD_ID,
T.CURR_PROD_ID,
T.ORDER_PROD_ID,
T.SERVICE_TYPE,
T.PAY_MODE
FROM ZB_SRC.ZB_D_ECDWAL04001_000 T
WHERE EXISTS ( SELECT 1
FROM ECS_MB_FLUXPACK B
WHERE B.SERVICE_TYPE = T.SERVICE_TYPE
AND B.FLUXPACK_NO IS NULL )
SELECT T.DEVICE_NUMBER,
T.ORD_PROV_ID,
T.CHANNEL_ID,
T.OPERATE_TYPE,
T.MAIN_PROD_ID,
T.CURR_PROD_ID,
T.ORDER_PROD_ID,
T.SERVICE_TYPE,
T.PAY_MODE
FROM ZB_SRC.ZB_D_ECDWAL04001_000 T
WHERE EXISTS ( SELECT 1
FROM ECS_MB_FLUXPACK B
WHERE B.SERVICE_TYPE = T.SERVICE_TYPE
AND B.FLUXPACK_NO IS NULL
AND ( B.FLUXPACK_NO = A.ORDER_PROD_ID
OR B.FLUXPACK_NO = A.CURR_PROD_ID)
)
T.ORD_PROV_ID,
T.CHANNEL_ID,
T.OPERATE_TYPE,
T.MAIN_PROD_ID,
T.CURR_PROD_ID,
T.ORDER_PROD_ID,
T.SERVICE_TYPE,
T.PAY_MODE
FROM ZB_SRC.ZB_D_ECDWAL04001_000 T
WHERE EXISTS ( SELECT 1
FROM ECS_MB_FLUXPACK B
WHERE B.SERVICE_TYPE = T.SERVICE_TYPE
AND B.FLUXPACK_NO IS NULL
AND ( B.FLUXPACK_NO(+) = T.ORDER_PROD_ID
OR B.FLUXPACK_NO(+) = T.CURR_PROD_ID)
) 是这个样子的 谢谢
因为B.FLUXPACK_NO = T.ORDER_PROD_ID 并且B.FLUXPACK_NO IS NULL 你觉得这样会出结果吗
我加上(+)是为了取ORDER_PROD_ID 有但是FLUXPACK_NO 不存在的记录 。
SELECT T.DEVICE_NUMBER,
T.ORD_PROV_ID,
T.CHANNEL_ID,
T.OPERATE_TYPE,
T.MAIN_PROD_ID,
T.CURR_PROD_ID,
T.ORDER_PROD_ID,
T.SERVICE_TYPE,
T.PAY_MODE
FROM ZB_SRC.ZB_D_ECDWAL04001_000 T
WHERE EXISTS ( SELECT 1
FROM ECS_MB_FLUXPACK B
WHERE B.SERVICE_TYPE = T.SERVICE_TYPE
AND ( NVL(B.FLUXPACK_NO,T.ORDER_PROD_ID) = T.ORDER_PROD_ID
OR NVL(B.FLUXPACK_NO,T.CURR_PROD_ID ) = T.CURR_PROD_ID )
)