SOQL/SQL:左外连接查询的结果不正确

问题描述

我对查询很困惑。我在 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'