垂直テーブルの2行をフラット化する必要があります(次に3番目のテーブルに結合します)。これは通常、必要なフィールドごとに派生テーブルを作成することによって行います。フィールドは2つしかないので、これはそれほど不合理ではないと思います。
しかし、派生テーブルに戻したい行は、3番目のテーブルとの結合にあるサブセットであることを私は知っています。そのため、クエリが最も効率的に実行されるように、作成するのに最適な派生テーブルを見つけようとしています。
派生テーブルのwhere句を制限するほど、派生テーブルが小さくなるほど、より良い応答が得られると思います。
本当に私が欲しいのは、派生テーブルのwhere句を3番目のテーブルとの結合と相関させることですが、SQLではそれを行うことができません。これは残念です。しかし、私はSQLマスターではありません。おそらく、私が知らないトリックがいくつかあります。
もう1つのオプションは、where句を使用せずに派生テーブルを作成することです。これにより、テーブル全体が2回(フィールドごとに1回)結合され、結合を実行すると、結合によってすべてが除外されます。
だから本当に私が求めているのは、私が欲しい行をかなり具体的に知っている派生テーブルを作成するための最良の方法ですが、SQLではそれらを取得できません。
例:
table1
------
id tag value
-- ----- -----
1 first john
1 last smith
2 first sally
2 last smithers
table2
------
id occupation
-- ----------
1 carpenter
2 homemaker
select table2.occupation, firsttable.first, lasttable.last from
table2, (select value as first from table1 where tag = 'first') firsttable,
(select value as last from table1 where tag = 'last') lasttable
where table2.id = firsttable.id and table2.id = lasttable.id
私がやりたいのは、tag='first'およびid=table2.idであるfirsttablewhere句を作成することです。