TSQL,从大多对多关系中选择值

时间:2010-06-16 08:58:26

标签: sql sql-server tsql

我有两张桌子 发布商和广告系列都与国家/地区,区域,语言和类别具有相似的多对多关系。

更多信息

Publisher2ategories具有publisherID和categoryID,它们是发布者中publisherID的外键,属于标识列的类别中的categoryID。另一方面,我有Campaigns2ategories,其中包含campaignID和categoryID列,这些列是广告系列中campaignID的外键,而类别中的categoryID又是身份。 区域,语言和国家关系也是如此

如何从区域,国家/地区,语言或类别获取至少有一个与发布商(我传递给查询发布商ID)的广告系列的广告系列ID?

DB DIAGRAM http://img227.imageshack.us/img227/7264/64255522.png

click here for direct link

感谢

2 个答案:

答案 0 :(得分:1)

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
...

答案 1 :(得分:0)

您可能希望一次找到一个连接类型的关联广告系列和发布商,并将结果合并:

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
...