単一のクエリで、すべてのオブジェクト A のリストと追加の列を取得する必要があります。テーブル B にオブジェクト C への関連付けがある場合は「1」を返し、オブジェクト C への関連付けがない場合は「0」を返します。表Bで。
テーブル A は、すべてのオブジェクト A を保持します テーブル B は、別のオブジェクト C に関連付けられたすべてのオブジェクト A を保持します。
私はオブジェクト C の ID を知っています。
現在、LEFT JOIN を使用したクエリと、JOIN に AND を使用した 2 つの条件を使用しています。戻り値の列には、「(TableB.id IS NOT NULL) as associated」を使用しています。
テーブル A には、おそらく数十から 100 のレコードしか保持されません。テーブル B には、おそらく数千から数十万のレコードが保持されます。テーブル C には、おそらく数千から数十万のレコードが保持されます。
TableA.id is index
TableB.tablea_id is index
TableB.id is index
TableB.tablec_id is index
TableC.id is index
私のクエリは現在次のようになっています。
SELECT TableA.name, TableA.code, (TableB.id IS NOT NULL) AS associated
FROM TableA
LEFT JOIN TableB ON TableA.id=TableB.tablea_id AND TableB.tablec_id = $input
SQL クエリに使用する方法や、目的の結果を達成するためのより良い方法について、パフォーマンス上の懸念はありますか?