我需要连接多个表以及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" ;
答案 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
它可能无法解决你所有的问题,但这绝对是其中之一