[Tips] SOQLでSELECT DISTINCTする

2023.01.25

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Salesforceで使用できる問い合わせ言語SOQL(Salesforce Object Query Language)にはDISTINCTが存在しません。

DISTINCTのように重複をまとめて取得したい場合はGROUP BYを使って次のようなSOQLを書くと上手くいきます。

SELECT
    lastName,
    firstName
FROM
    Contact
WHERE
    Account.Name = '○×株式会社'
GROUP BY
    lastName, firstName

GROUP BYで指定したlastName、firstNameで値をまとめて、◯×株式会社の取引先責任者の氏名を重複なしでSELECTしています。

他の集計関数と組み合わせることももちろん可能で、例えば重複回数が2件以上あるものだけ取り出したい時は次のようにします。

SELECT
    lastName,
    firstName
FROM
    Contact
WHERE
    Account.Name = '○×株式会社'
GROUP BY
    lastName, firstName
HAVING
    COUNT(Name) >= 2

SOQLでは列の値を結合するCONCATも使えないので、列の値の組み合わせに対して集合関数を使うためには、列の値を結合する数式をあらかじめ用意しておく必要があります。

この例では、lastNameとfirstNameの結合値として標準項目のNameがあるので、これを使っています。