TSQL, выберите значения из большого отношения многие ко многим - PullRequest
1 голос
/ 16 июня 2010

у меня две таблицы Издатели и кампании имеют схожие отношения «многие ко многим» со странами, регионами, языками и категориями.

подробнее

Publisher2Categories имеет publisherID и categoryID, которые являются внешними ключами для publisherID в Publishers и categoryID в категориях, которые являются столбцами идентификаторов. С другой стороны, у меня есть Campaigns2Categories со столбцами campaignID и categoryID, которые являются внешними ключами для campID в Campaigns и categoryID в категориях, которые снова являются идентичностями. То же самое касается отношений между регионами, языками и странами

Как получить идентификаторы кампаний кампаний, которые имеют хотя бы одно значение, равное значению Publisher (я передаю запрос publisherID) из регионов, стран, языка или категорий?

ДИАГРАММА БД http://img227.imageshack.us/img227/7264/64255522.png

нажмите здесь для прямой ссылки

спасибо

Ответы [ 2 ]

1 голос
/ 16 июня 2010

JOINING каждая отдельная таблица многих издателей и кампаний и UNION результат должен оставить вас со всеми участниками кампании, у которых есть совпадение между издателями и кампаниями через одну из соответствующих таблиц отношений.

SELECT  cc.CampaignID
FROM    dbo.PublisherSites2Countries pc
        INNER JOIN dbo.Campaings2Countries cc ON cc.CountryID = pc.CountryID
UNION SELECT pr.CampaignID
FROM    dbo.PublisherSites2Regions pr
        INNER JOIN dbo.Campaings2Regions cr ON cr.RegionID = pr.RegionID
...
0 голосов
/ 16 июня 2010

Возможно, вы хотите найти связанные кампании и издателей по одному типу соединения за раз и объединить результаты:

SELECT DISTINCT campaignID
  FROM Campaigns2Countries c2cy
 WHERE EXISTS (SELECT * FROM PublisherSites2Countries
                WHERE countryID = c2cy.countryID
                  AND publisherID = :publisherID)
UNION
SELECT DISTINCT campaignID
  FROM Campaigns2Categories c2cat
 WHERE EXISTS (SELECT * FROM PublisherSites2Categories
                WHERE categoryID = c2cat.categoryID
                  AND publisherID = :publisherID)
UNION
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...