使用另一个Query的结果集连接多个表

时间:2015-05-06 07:34:47

标签: sql oracle join subquery union

我需要连接多个表以及select查询的结果集,该查询本身使用UNION运算符从两个表中获取数据。 以下查询未给出任何错误,但返回没有数据,而数据存在。请告诉我这个查询有什么问题。我怎样才能做到这一点。

QUERY:

SELECT max(a."TRIP_DATE" ),   
     max(a."TRIP_NUMBER" ),   
     max(a."BOOKING_NUMBER" ),   
     max(nvl(a."SPONSOR_ID",a."TRAVELLER_ID" )),
     max( EMPLOYEE_NUMBER ),
     max( FIRST_NAME ),
     max( MIDDLE_NAME ),
     max( SURNAME ),
     max(UPPER(nvl(a."SPONSOR_NAME",a."NAME" )) ),
FROM BOOKING a
JOIN SEGMENT_BOOKING b
ON a."BOOKING_NUMBER" = b."BOOKING_NUMBER" AND
    a."TRIP_NUMBER" = b."TRIP_NUMBER" AND
    a."TRIP_DATE" = b."TRIP_DATE" 
JOIN TRIP_SEGMENT c
ON b."TRIP_NUMBER" = c."TRIP_NUMBER" AND
    b."TRIP_DATE" = c."TRIP_DATE" AND
    b."SEGMENT_NUMBER" = c."SEGMENT_NUMBER"
JOIN ( SELECT d.EMPLOYEE_NUMBER AS EMPLOYEE_NUMBER,d.FIRST_NAME AS FIRST_NAME,
        d.MIDDLE_NAME AS MIDDLE_NAME ,d.SURNAME AS SURNAME
        FROM STAFF d
        UNION
       SELECT e.CONTRACT_STAFF_ID,e.FIRST_NAME,e.MIDDLE_NAME,
        e.SURNAME
        FROM CONTRACT_STAFF e 
      )
ON a."TRAVELLER_ID"  = EMPLOYEE_NUMBER

     WHERE ( ( a."STATUS" = 'CF' ) OR ( a."STATUS" = 'WL' ) ) 
 AND  a."TRIP_DATE" >= TO_DATE('2014-01-01 00:00:00','YYYY-MM-DD HH24:MI:SS')  
AND a."TRIP_DATE" <=   TO_DATE('2015-05-30 00:00:00', 'YYYY-MM-DD HH24:MI:SS') AND  
             a."TRIP_NUMBER" like '%ABCDEFGH%' 
    GROUP BY a."BOOKING_NUMBER" ; 

1 个答案:

答案 0 :(得分:0)

问题可能就是你的联合子查询正在返回

您已为STAFF表的列名设置了别名,但没有为CONTRACT_STAFF表设置别名,因此只有STAFF表的结果在EMPLOYEE_NUMBER字段中具有非空值,因此您的联合子查询应该如下:

SELECT d.EMPLOYEE_NUMBER AS EMPLOYEE_NUMBER,d.FIRST_NAME AS FIRST_NAME,
                d.MIDDLE_NAME AS MIDDLE_NAME ,d.SURNAME AS SURNAME
                FROM STAFF d
UNION
SELECT e.CONTRACT_STAFF_ID AS EMPLOYEE_NUMBER,
               e.FIRST_NAME AS  FIRST_NAME, e.MIDDLE_NAME AS MIDDLE_NAME,
                e.SURNAME AS SURNAME
                FROM CONTRACT_STAFF e

它可能无法解决你所有的问题,但这绝对是其中之一