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

  1. Warum sind nicht alle CampaignMember Objekte zurückgegeben, die von der Unterabfrage?
  2. 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).
InformationsquelleAutor Benj | 2010-10-26
Schreibe einen Kommentar