オプションとして、次のようにクエリを書き直してみることができます。
SELECT
b1.NAME,
b2.NAME,
.
.
.
FROM TAB1 a
INNER JOIN TAB2 b1 ON a.ID1 = b1.ID
INNER JOIN TAB2 b2 ON a.ID1 = b1.ID
...
効率に関してはほとんど違いはありませんが、少なくともクエリが読みやすくなる可能性があります (もちろん主観的です)。
考慮すべき別のオプションがあるかもしれませんが、よくわからない 2 つの大きな IF があります。
最初のものは、 のキーの存在に依存しますTAB1
。専用のキー列がない場合は、すべての組み合わせが一意であることが保証されていれば十分です。このアプローチが複数のルックアップよりも効率的であるかどうかは、列の数によって異なります。(ID1, IF2, ... IDN)
IDx
アイデアは、 @dasblinkenlight の回答と同様の条件で 2 つのテーブルを一度だけ結合し、キー列でグループ化し、条件付き集計を使用して名前を取得することです。これが私が意味することです:
SELECT
MAX(CASE TAB2.ID WHEN TAB1.ID1 THEN TAB2.NAME END) AS NAME1,
MAX(CASE TAB2.ID WHEN TAB1.ID2 THEN TAB2.NAME END) AS NAME2,
.
.
.
FROM TAB1
INNER JOIN TAB2 ON TAB2.ID IN (TAB1.ID1, TAB1.ID2, ...)
GROUP BY TAB1.ID1, TAB1.ID2, ...