您有一个范围界定问题。工会组合了两个单独的查询。因此,如果您将查询分开:
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
您可以看到在第二个查询中没有像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
我必须得到'丑陋'的答案,我会如何写这个? – flavour404 2009-07-08 21:17:22