问题描述
我对查询很困惑。我在 Salesforce 中有三个对象:联系人、CampaignMember、Campaign。 现在,我想获取活动“A”中但不在活动“B”中的所有联系人。 我的代码 belwo 不起作用:
var controller = new ScrollMagic.Controller();
var scrollHorizontal = new TimelineLite()
scrollHorizontal.to("#scrollHorizontal",1,{x:'-100%'})
var horizontalScroll = new ScrollMagic.Scene({
triggerElement: "#scrollHorizontal",triggerHook: 'onLeave',duration: 3000
}).setPin("#scrollHorizontal").setTween(scrollHorizontal).addTo(controller);
Salesforce 只是忽略了这部分:
SELECT Contact.FirstName,Contact.LastName,Contact.ID FROM CampaignMember WHERE Campaign.Name= 'A' AND Campaign.Name != 'B'
尽管如此,我还是得到了“A”中的所有联系人。不是我想要的 A&B 之间的区别。
如果我切换到 AND Campaign.Name != 'B'
only,它会返回零个联系人,这是不正确的。
我想这是因为活动和联系人之间的链接是通过活动成员对象建立的,我正在尝试对活动进行左外连接,我想要活动“A”的联系人不在“B”中.
有没有办法做到这一点?我将不胜感激。
非常感谢!
解决方法
使用聚合。假设没有重复:
SELECT c.FirstName,c.LastName,c.ID
FROM CampaignMember c
WHERE c.Name IN ('A','B')
GROUP BY c.FirstName,c.ID
HAVING COUNT(*) = 1 AND MAX(c.Name) = 'A';
如果确实有重复项,可以使用:
HAVING MIN(c.Name) = MAX(c.Name) AND MAX(c.Name) = 'A'