Sql 另一个union all选择所有尚未选择的行

Sql 另一个union all选择所有尚未选择的行,sql,sql-server-2005,stored-procedures,Sql,Sql Server 2005,Stored Procedures,现在,我有两个select语句,它们由一个联合连接起来。我要做的是,将第一个查询命名为query1,第二个查询命名为query2,然后在第三个查询中,将where BOOK NO not命名为query1或query2 SELECT distinct t0.BOOKNO, t0.PaxName, t0.Locator, t0.FDATE7, t0.BOARD, t0.ALIGHT, t0.AIRLINE, t0.FNUMBR, t0.

现在,我有两个select语句,它们由一个联合连接起来。我要做的是,将第一个查询命名为query1,第二个查询命名为query2,然后在第三个查询中,将where BOOK NO not命名为query1或query2

SELECT  distinct    t0.BOOKNO, t0.PaxName, t0.Locator, t0.FDATE7, 
                          t0.BOARD, t0.ALIGHT, t0.AIRLINE, t0.FNUMBR, t0.DEP, 
                          t0.ARR, t0.TOUR, t0.ROUTE,
                           t1.tour, t1.route, t1.sfrom , t1.sto,t1.seq,t0.seq, 'yes'
    FROM     
      (  SELECT     TOP (100) PERCENT test.dbo.BNAMES.BOOKNO, RTRIM(test.dbo.BNAMES.SRNAME) + '/' + RTRIM(test.dbo.BNAMES.FIRST) + RTRIM(test.dbo.BNAMES.TITLE) 
                          AS PaxName, test.dbo.PNRS.PNR AS Locator, test.dbo.PNRSECTORS.FDATE7, test.dbo.PNRSECTORS.BOARD, test.dbo.PNRSECTORS.ALIGHT, 
                          test.dbo.PNRSECTORS.AIRLINE, test.dbo.PNRSECTORS.FNUMBR, test.dbo.PNRSECTORS.DEP, test.dbo.PNRSECTORS.ARR, test.dbo.BOOKINGS.TOUR, 
                          test.dbo.BOOKINGS.ROUTE, test.dbo.BSTAGES.SEQ,(test.dbo.PNRSECTORS.BOARD + test.dbo.PNRSECTORS.ALIGHT) as both
    FROM         test.dbo.BOOKINGS LEFT OUTER JOIN
                          test.dbo.BNAMES ON test.dbo.BOOKINGS.BOOKNO = test.dbo.BNAMES.BOOKNO LEFT OUTER JOIN
                          test.dbo.BSTAGES ON test.dbo.BNAMES.BOOKNO = test.dbo.BSTAGES.BOOKNO LEFT OUTER JOIN
                          test.dbo.PNRSECTORS ON test.dbo.BSTAGES.SCODE = test.dbo.PNRSECTORS.SKEY LEFT OUTER JOIN
                          test.dbo.PNRS ON test.dbo.PNRSECTORS.PNRKEY = test.dbo.PNRS.PNRKEY
    WHERE     (test.dbo.BSTAGES.STYPE = 3)
    ORDER BY test.dbo.BOOKINGS.BOOKNO, test.dbo.BNAMES.SEQ, locator
    ) t0 
    INNER JOIN (  SELECT     TOUR, ROUTE, OFFSET, SEQ, SCODE, SFROM, STO, (SFROM + STO) AS BOTH
    FROM         test.dbo.TSTAGES    
    ) t1         ON t1.tour = t0.tour and t1.route = t0.route and (t0.both = t1.both)

    union all


    SELECT  distinct    t0.BOOKNO, t0.PaxName, t0.Locator, t0.FDATE7, 
                          t0.BOARD, t0.ALIGHT, t0.AIRLINE, t0.FNUMBR, t0.DEP, 
                          t0.ARR, t0.TOUR, t0.ROUTE,
                           t1.tour, t1.route, t1.sfrom , t1.sto,t1.seq,t0.seq,'YES'
    FROM     
      (   SELECT     TOP (100) PERCENT test.dbo.BNAMES.BOOKNO, RTRIM(test.dbo.BNAMES.SRNAME) + '/' + RTRIM(test.dbo.BNAMES.FIRST) + RTRIM(test.dbo.BNAMES.TITLE) 
                          AS PaxName, test.dbo.PNRS.PNR AS Locator, test.dbo.PNRSECTORS.FDATE7, test.dbo.PNRSECTORS.BOARD, test.dbo.PNRSECTORS.ALIGHT, 
                          test.dbo.PNRSECTORS.AIRLINE, test.dbo.PNRSECTORS.FNUMBR, test.dbo.PNRSECTORS.DEP, test.dbo.PNRSECTORS.ARR, test.dbo.BOOKINGS.TOUR, 
                          test.dbo.BOOKINGS.ROUTE, test.dbo.BSTAGES.SEQ,(test.dbo.PNRSECTORS.BOARD + test.dbo.PNRSECTORS.ALIGHT) as both
    FROM         test.dbo.BOOKINGS LEFT OUTER JOIN
                          test.dbo.BNAMES ON test.dbo.BOOKINGS.BOOKNO = test.dbo.BNAMES.BOOKNO LEFT OUTER JOIN
                          test.dbo.BSTAGES ON test.dbo.BNAMES.BOOKNO = test.dbo.BSTAGES.BOOKNO LEFT OUTER JOIN
                          test.dbo.PNRSECTORS ON test.dbo.BSTAGES.SCODE = test.dbo.PNRSECTORS.SKEY LEFT OUTER JOIN
                          test.dbo.PNRS ON test.dbo.PNRSECTORS.PNRKEY = test.dbo.PNRS.PNRKEY
    WHERE     (test.dbo.BSTAGES.STYPE = 1)
    ORDER BY test.dbo.BOOKINGS.BOOKNO, test.dbo.BNAMES.SEQ, locator
    ) t0 
    INNER JOIN (  SELECT     TOUR, ROUTE, OFFSET, SEQ, SCODE, SFROM, STO, (SFROM + STO) AS BOTH
    FROM         test.dbo.TSTAGES    
    ) t1         ON t1.tour = t0.tour and t1.route = t0.route and t1.seq = t0.seq and (t0.both = t1.both)
    order by bookno 





    END

和你一起使用怎么样?您可以声明您的查询,将它们与UNION连接,并搜索不在那里的查询

请看这里:。它应该能帮助你开始


通过使用WITH语句,您将隔离查询的逻辑,使整个查询更易于理解。

只需将您的逻辑围绕您编写的内容:

select bookno 
where key not in (
your big select statement...
)

嵌套查询中的
ORDER BY
在与
TOP 100%一起使用时会被优化掉。你可以把这两个都扔掉。谢谢,那你要什么呢solution@bugz:什么的解决方案?您还没有问任何问题。哦,对不起,我的意思是,最好是直接下订单,还是只选择一个普通的选择,而不选择percent@bugz当前位置没什么区别,计划是一样的。这只是一个旁注。