0

単一のクエリで、すべてのオブジェクト 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 クエリに使用する方法や、目的の結果を達成するためのより良い方法について、パフォーマンス上の懸念はありますか?

4

1 に答える 1

0

私が見る限り、あなたのクエリは問題ないようです。

ただし、on の条件は、join外部キーと一致する必要があることに注意してください。このプラクティスに従うことで、少なくともクエリが読みやすくなり、保守しやすくなります。

于 2012-05-19T12:56:12.583 に答える