Apex——SOQL在多個對象上進行關聯查詢

SOQL在多個對象的關聯查詢

引言

最開始接觸SOQL語句的時候,其實覺得和java等裏的SQl沒有什麼區別,但是當真正在多個對象上進行查詢時就不再是java中的寫法了。java中的from後面只能跟一個對象(sObject)然後就是where語句和order什麼的(和java類似),那怎麼進行多對象的關聯查詢呢?

重要的reference類型

在apex中,如果對象與對象之間有關聯,可以look-up字段(比如一個職位申請(job Application)只有一個候選人(Candidate),在job application上可以建立一個loopup字段到Candidate,這個字段是一個reference引用類型);同樣也可以創建一個master-details字段(比如一個job application可能會被創建多個評論(Review),那麼我們可以在Review上建立一個master-detail字段指向Job Application,同理這個字段也是一個reference引用類型)。其實這兩個字段也就相當於數據庫表中的外鍵來建立表與之間的聯繫。
因此只要是對象之間有reference進行關聯,我們就可以使用SOQL進行多對象(也就是多表查詢)。你總不會還問那對象之間沒有關聯怎麼查呢?既然都沒有關聯,說明也不存在什麼聯繫(也就沒有所謂的外鍵),那查詢的意義又在哪呢?總得有個對象之間相等的條件吧。

代碼示例

[SELECT Position__r.Id, Position__r.status__c,Position__r.Name,Id,Average_Review_Score__c,Candidate__r.City__c, Candidate__r.Email__c FROM Job_Application__c WHERE Position__r.Name Like :positionParameter AND Candidate__r.Years_of_Experience__c >= :experienceYear ORDER BY Average_Review_Score__c DESC]

上述代碼中主要對象Job Application,其與Position和Candidate都有reference類型的字段。代碼會有不完整的地方,也sql多表查詢的區別就是

  • from後跟的對象只能有一個,並且要加上**__c後綴**
  • 要查詢其他對象時,將其他對象的後綴改爲__r,要查詢該對象上的字段就是用object__r.field__c形式進行查詢
  • where等語法類似,不再贅訴

本來是開發的時候想自己解決這個問題,由於剛剛接觸,對google使用不夠熟練,還是花費了一些時間。如有解釋不清楚或者錯誤的地方,歡迎留言討論,共同學習!Good night!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章