UNION SQL语句不起作用

fla*_*404 0 sql union

为什么这是错的,我怎么能说得对呢?

SELECT     PublicationID
FROM         (SELECT DISTINCT pat.PublicationID
                       FROM          dbo.PubAdvTransData AS pat INNER JOIN
                                          dbo.PubAdvertiser AS pa ON pat.AdvTransID =   pa.AdvTransID
                       WHERE      (pat.LastAdDate > '7 / 1 / 2009') AND (pat.PublicationID = 29171)) AS table1
UNION
SELECT     PublicationAreaBuy.AreaBuyID AS PublicationID
FROM         PublicationAreaBuy INNER JOIN
                      table1 AS table1_1 ON table1.publicationID =     PublicationAreaBuy.PublicationID
Run Code Online (Sandbox Code Playgroud)

错误是table1是无效对象.

谢谢.

Tom*_*ter 7

你有一个范围问题.联合组合了两个单独的查询.因此,如果您将查询分开:

SELECT PublicationID
FROM ( SELECT DISTINCT pat.PublicationID
       FROM dbo.PubAdvTransData AS pat 
       INNER JOIN dbo.PubAdvertiser AS pa 
         ON pat.AdvTransID =   pa.AdvTransID
       WHERE (pat.LastAdDate > '7 / 1 / 2009') AND (pat.PublicationID = 29171)
     ) AS table1



SELECT PublicationAreaBuy.AreaBuyID AS PublicationID
FROM PublicationAreaBuy 
INNER JOIN table1 AS table1_1 
  ON table1.publicationID = PublicationAreaBuy.PublicationID
Run Code Online (Sandbox Code Playgroud)

你可以看到在第二个查询中没有table1这样的东西.还有其他一些方法可以完成您要做的事情:

  • 复制子查询(丑陋)
  • 使用公用表表达式(仅当这是T-SQL时)
  • 使用#temporary @table(再次,我只知道如何在T-SQL中执行此操作)

如果我们要复制子查询,它看起来像这样.但是,顶部查询没有条件,因此它不需要是子查询:

SELECT DISTINCT pat.PublicationID
FROM dbo.PubAdvTransData AS pat 
INNER JOIN dbo.PubAdvertiser AS pa 
   ON pat.AdvTransID =   pa.AdvTransID
WHERE (pat.LastAdDate > '7 / 1 / 2009') AND (pat.PublicationID = 29171)


UNION

SELECT PublicationAreaBuy.AreaBuyID AS PublicationID
FROM PublicationAreaBuy 
INNER JOIN ( SELECT DISTINCT pat.PublicationID
       FROM dbo.PubAdvTransData AS pat 
       INNER JOIN dbo.PubAdvertiser AS pa 
         ON pat.AdvTransID =   pa.AdvTransID
       WHERE (pat.LastAdDate > '7 / 1 / 2009') AND (pat.PublicationID = 29171)
     ) AS table1 
  ON table1.publicationID = PublicationAreaBuy.PublicationID
Run Code Online (Sandbox Code Playgroud)