I want to display all the Accounts that have same contacts in them. Suppose Account 'A' has 5 contacts associated to it lets say c1,c2,c3,c4 and c5. Now on contact page i want to see a related list where all other related contacts can be displayed. Means if I open contacts page of c1 then i want a related list showing entries like c2,c3,c4 and c5.

For this I was thinking to use SOQL and then populate the related list using apex. The SOQL query returns all the name of contacts that are related.

List<Contact> acid=[SELECT Id, AccountId, Name, Related_Contacts__c 
                    FROM Contact 
                    WHERE AccountId = : cnt.AccountId];

2 Answers 2


You have to write a visualforce page for the Contact standard page layout, add it to the layout and write an extension:

Visualforce Page:

<apex:page standardController="Contact" extensions="MyExtension">
    <apex:pageBlock title="{!$ObjectType.Contact.labelPlural}">
        <apex:pageBlockTable value="{!Contacts}" var="cont">
            <apex:column value="{!cont.Name}" />

Controller extension:

public class MyExtension {
    private final Contact cont;

    // Getting the current contact
    public MyExtension(ApexPages.StandardController stdController) {
        this.cont = (Contact)stdController.getRecord();

    // Getting related contacts based on the Account-ID excluding the current contact
    public List<Contact> getContacts() {
        return [SELECT Id, Name, AccountId
                FROM Contact 
                WHERE AccountId = : cont.AccountId)
                AND Id != cont.Id]
  • Thanks Sergey :) I did slight changes in your code and it worked for me. Mar 22, 2016 at 6:55

Thanks Sergey :)

I did some changes in getContact() as it was showing error System.SObjectException: SObject row was retrieved via SOQL without querying the requested field: Contact.AccountId.

I made this getter function like this and it worked.....

// Getting related contacts contact
    public List<Contact> getContacts() {
        List<Contact> aa=[Select AccountId from contact where Id =:cont.Id];
        return [SELECT Contact.AccountId, Name, Id,LastName
                FROM Contact where Id != : cont.Id AND Contact.AccountId= :aa[0].AccountId];

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.