Это фактически сводная точка, но ее проще всего представить как UNION
из двух различных наборов - набора публикаций и набора областей, с которыми они связаны. Обычный UNION
устраняет дублирование наборов, поэтому обычно немного медленнее. UNION ALL
, вероятно, создаст несколько областей, если две публикации находятся в одной области, поэтому вам потребуется DISTINCT
, чтобы остановить там дубликаты, если вы используете UNION ALL
:
SELECT 'Publication' AS RowType
,Publication.PublicationID AS idNum
,Publication.NameAbbrev AS name
FROM Publication
WHERE Publication.SignedUp >= '1/1/2009'
UNION ALL
SELECT DISTINCT 'Area' AS RowType
,AreaBuy.AreaBuyID AS idNum
,AreaBuy.NameAbbrev AS name
FROM AreaBuy
INNER JOIN PublicationAreaBuy
ON AreaBuy.AreaBuyID = PublicationAreaBuy.AreaBuyID
INNER JOIN Publication
ON PublicationAreaBuy.PublicationID = Publication.PublicationID
WHERE Publication.SignedUp >= '1/1/2009'
или используя UNION
:
SELECT 'Publication' AS RowType
,Publication.PublicationID AS idNum
,Publication.NameAbbrev AS name
FROM Publication
WHERE Publication.SignedUp >= '1/1/2009'
UNION
SELECT 'Area' AS RowType
,AreaBuy.AreaBuyID AS idNum
,AreaBuy.NameAbbrev AS name
FROM AreaBuy
INNER JOIN PublicationAreaBuy
ON AreaBuy.AreaBuyID = PublicationAreaBuy.AreaBuyID
INNER JOIN Publication
ON PublicationAreaBuy.PublicationID = Publication.PublicationID
WHERE Publication.SignedUp >= '1/1/2009'
На диалекте SQL, поддерживающем общие табличные выражения, вы можете избежать дублирования более сложной бизнес-логики, выполнив следующее:
WITH SelectedPubs AS (
SELECT Publication.PublicationID
,Publication.NameAbbrev
FROM Publication
WHERE Publication.SignedUp >= '1/1/2009'
)
SELECT 'Publication' AS RowType
, SelectedPubs.PublicationID AS idNum
,SelectedPubs.NameAbbrev AS name
FROM SelectedPubs
UNION
SELECT 'Area' AS RowType
,AreaBuy.AreaBuyID AS idNum
,AreaBuy.NameAbbrev AS name
FROM AreaBuy
INNER JOIN PublicationAreaBuy
ON AreaBuy.AreaBuyID = PublicationAreaBuy.AreaBuyID
INNER JOIN SelectedPubs
ON PublicationAreaBuy.PublicationID = SelectedPubs.PublicationID