【发布时间】:2015-07-16 05:04:20
【问题描述】:
我需要连接多个表以及选择查询的结果集,该查询本身使用 UNION 运算符从两个表中获取数据。 以下查询没有给出任何错误,但在数据存在时不返回数据。请告诉我这个查询有什么问题。我怎样才能做到这一点。
查询:
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" ;
【问题讨论】:
-
我们没有您的数据来验证和复制您声称的内容。请发布一个工作测试用例。提供创建和插入语句。当您说您没有得到任何行时,您需要查看您的
filter predicate。您必须过滤掉这些行。检查您的过滤条件。 -
您真的想要名字、姓氏等不相关的最大值吗?这对我来说毫无意义......
-
我不知道您是否可以这样做:“ON a."TRAVELLER_ID" = EMPLOYEE_NUMBER" 不确定您是否可以访问该子查询,您是否尝试过为其设置别名?
-
... e.SURNAME FROM CONTRACT_STAFF e ) t ON a."TRAVELLER_ID" = t.EMPLOYEE_NUMBER -
你应该别名的是你的子查询结果,而不是你的表,正如@sqluser 刚刚展示的那样
标签: sql oracle join subquery union