У вас есть проблема с областью видимости. Союз объединяет два отдельных запроса. Так что если вы разделяете ваши запросы:
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)
- использовать #teorary @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