我迷上了查询的逻辑,我需要一些帮助。首先,我有一个父表Campaigns
。然后,子表CampaignParks
看起来像这样:
select * from CampaignParks
出于商业原因,我不会厌倦你,我们需要将公园包含在广告系列表中,即使它们未包含在广告系列中。要将它们实际包含在广告系列中,就会有一个标志。可以将无,一个或多个Park设置为包含在广告系列中。
确定。很简单。现在...
鉴于@ParkID,我需要返回ParkID匹配的所有父广告系列,但仅限于广告系列的IncludeInCampaign
个标记中的一个(或多个)已设置。如果没有设置给定广告系列的IncludeInCampaign
个标记,那么我们只是忽略@Parks的值。我们不关心它。
示例:
所以,我认为查询看起来像这样:
SELECT
DISTINCT
sc.ContactID,
cp.*
FROM
Campaigns sc
JOIN CampaignParks cp on sc.CampaignID = cp.CampaignID
WHERE
((SELECT COUNT(*) FROM CampaignParks cp2 WHERE cp2.CampaignID = sc.CampaignID AND cp2.IncludeInCampaign = 1) > 0 OR cp.ParkID = @ParkID)
但是,这并没有让我得到正确的结果。
(我需要带女儿去体操......我回来时会看看依赖。谢谢!)
答案 0 :(得分:0)
我认为你的代码很接近。主要区别在于AND
子句中的OR
与WHERE
:
SELECT sc.ContactID, cp.*
FROM Campaigns c JOIN
CampaignParks cp
on sc.CampaignID = cp.CampaignID
WHERE cp.ParkId = @ParkId AND
EXISTS (SELECT 1
FROM CampaignParks cp2
WHERE cp2.CampaignID = cp.CampaignID AND
cp2.IncludeInCampaign = 1
);