編集
何が必要かよくわかりません
- 期待される結果を表示できますか
- 「パフォーマンスの観点から、それを殺す」とはどういう意味か教えてください(実行時間の20秒になりますか?)
より効率的だとは思いませんが、試してみてください。
select
*
from
tableA as a
left join tableB as b1
on a.id=b1.id1
and b1.col2='Red'
left join tableB as b2
on a.id=b2.id2
and b2.col2='Blue'
where
(b1.id1 is not null or b2.id2 is not null)
or (b1.id1 is null and b2.id2 is null)
SELECT
で結果を管理する必要があります CASE WHEN
...
パフォーマンスを比較し、適切な列にインデックスを配置できます(完全なテーブルとクエリの内容によって異なりますが、ここではid, id1 and col2
である必要があります。 )