SOQL-Abfrage mit Unterabfrage
Ich habe Probleme dabei, die Ergebnisse möchte ich aus einer Salesforce/Apex/SOQL-Abfrage.
Ich will: Eine Liste von Contact-Objekten, die nur Kontakte, die CampaignMembers einer Reihe von Kampagnen; und Sie sollten die Daten aus, die Kampagne Mitglied leicht zugänglich.
(mein Ziel ist eine VF-Seite mit einer Liste alle Kontakte verbunden sind, jede dieser Kampagnen mit einem raster, der angibt, deren status für jede Kampagne.)
Diese Arbeit:
Campaign[] cams = [SELECT id, name
FROM Campaign
WHERE parentid = '70170000000LRIe'];
System.debug(cams);
//returns ~4 Campaign objects
CampaignMember[] cmembers = [SELECT id, status, contactid, campaignid
FROM CampaignMember
WHERE campaignid in :cams];
System.debug(cmembers);
//returns about 40 CampaignMember objects.
Hier ist mein problem:
Contact[] members = [SELECT id, firstname, lastname,
(SELECT id, status, comment__c, campaignid
FROM Contact.CampaignMembers
WHERE campaignid in :cams)
FROM Contact];
System.debug(members);
//contains ALL Contacts in the DB, but I wanted filtered results.
System.debug(members[x].CampaignMembers);
//this is a contact I've verified has a qualifying CampaignMember, but the list is empty.
//UPDATE: CampaignMembers are now being returned, not sure what changed...
Warum sind nicht alle CampaignMember Objekte zurückgegeben, die von der Unterabfrage?- Warum ist nicht die Kontakt-Liste gefiltert werden? (naja, offensichtlich ist b/c es gibt keine WHERE-Klausel, aber, was die WHERE-Klausel bietet, was ich will?)
Ich weiß, ich könnte dies tun, indem Sie die CampaignMember Abfrage auf seine eigene, und Durchlaufen Sie zu prep eine Kontakt-Abfrage, aber das scheint wie eine Menge zusätzliche Verarbeitung, wenn eine Unterabfrage funktionieren sollte.
Dank!
Update
Den CampaignMember Objekte werden nun angezeigt - seltsam - ich muss ein paar kleine Tippfehler, ohne es zu merken (und ja, Sie sind der Rückgabe mehrerer Spalten, und das scheint in Ordnung zu sein).
Ich noch nicht herausfinden können, wie das filtern der Kontakt-Abfrage, obwohl...
- SQL-Unterabfragen in der SELECT nicht erlaubt die Rückkehr von mehr als einer Spalte
- Warum verwenden Sie eine SQL-Unterabfrage gibt es? Sie können eine join-Abfrage zwischen den 2 Tabellen!! Als Omg-Ponys, die sagte, die Unterabfrage auf die wählen Sie nur zurückkehren können, 1 Spalte pro subquery!!
- Dies ist salesforce SOQL, nicht SQL. Es gibt keine JOIN-Schlüsselwort in SOQL - kann man nur durchqueren, Beziehungen mithilfe von Unterabfragen (die Abfrage mehr als eine Spalte).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnten Sie ein semi-join auf die Kontakte zu filtern, die Kontakte zu dem Satz, den Sie möchten, so etwas wie dieses
Weitere option wäre die Fahrt von campaignMmeber statt.