function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
InfoDeliver IncInfoDeliver Inc 

SOQL 実装に関する質問

SOQLについて知識が少なく、以下のケースがSOQLで実現方法のアドバイスをいただければ、助かります。

Custom には feature (特徴)という属性があります。
Featureは複数あります。数は無制限にしています。
これを表現するために、Custom Object と Feature Objectを作成して、
Custom 1 .. N   Feature  の関係しています。

Featureによって、推奨する商品 Productがあります。
一つの商品 Product は、複数のFeature条件が合致する時に推奨されます。
Product 1 .. N Feature という関係です。

ここで、ある顧客に推奨すべき商品を検索したい時に、
SOQLでどのように実現でしょうか?
Taiki YoshikawaTaiki Yoshikawa
ちょっと取得条件がわかっていないですが、SOQLでは次のようなクエリを実行できます。
// 取引先IDを持つ取引先責任者の取得
Id accountId = 'レコードID';
List<Contact> contacts = [SELECT Id FROM Contact WHERE AccountId =: accountId];

// 取引先ID(複数)を持つ取引先責任者の取得
List<Id> accountIds = '複数のレコードID';
List<Contact> contacts = [SELECT Id FROM Contact WHERE AccountId IN: accountIds];

// 取引先検索時にサブクエリで取引先責任者も取得
List<Account> accounts = [SELECT Id, (SELECT Id FROM Contacts LIMIT 50) FROM Account LIMIT 200];

サブクエリはWHERE部分でも使用できるので何か利用できるかもしれません。あいまい検索ということでしたらLIKE条件も利用できると思います。


もしかすると確認済みかもしれませんが、開発者ガイドのリンクです。

Force.com SOQL および SOSL リファレンス
https://help.salesforce.com/help/pdfs/ja/salesforce_soql_sosl.pdf
 
InfoDeliver IncInfoDeliver Inc
ご返事をいただき、ありがとうございます。

一つ訂正させていただきます。
誤:Product 1 .. N Feature という関係です。
正:Product N .. N Feature という関係です。

## 以下、簡単な例、また、SQL Object, 課題を示します。

例えば、顧客Aには、以下の特徴があります。
sport,  ball,  out-door ,  in-door, team play,  game , white color, orange color,  cooking,

以下三つのProductがあって、それぞれ2,3の特徴を付けています。
table tennis racket  :   sport,  in-door , ball 
cooking game  :  game, cooking
golf shoes :  out-door ,  white color,  running 

最初の二つProductのすべての特徴は、顧客Aの特徴にありますので、選択されます。
The golf shoes の running 特徴は、顧客Aにないので、選択されません。

## 簡単Object設計、SOQLと課題

Customer__c :Name, ID
Product__c : Name, ID
Feature__c : Name , ID
CustomerFeature__c : Name, ID,customerID__c , featureID__c
ProductFeature__c : Name, ID, productID__c, featureID__c

1, SELECT ID FROM CustomerFeature__c WHERE customerID__c = 「custome ID」
2, SELECT productID__c FROM ProductFeature__c WHERE featureID__c IN  [ result ID of the above 

SQL]

1つ目のSOQLは、正しくFeatureIDを選択できます。
2つ目のSOQLは、一つFeatureでも適合するProductを選択してしまいますので、golf shoes が選択され

てしまいます。
目的として、すべての特徴が適合しなければ、選択されません。golf shoesを除外したい。
正しいSOQLの書き方を教えていただきたい。
Taiki YoshikawaTaiki Yoshikawa
SOQLだけでは対応できないかもしれませんね。
取得した後、Mapなどで判定処理する必要があるかもしれません。