0

いくつかの列を持つテーブル A があるとします。「履歴」テーブルであるため、エントリにインデックスがないテーブルで作業します。ただし、特定の列を 1 つ使用して、自分のものを特定しています。この ID を呼び出します。以下のようなクエリを作成すると、1 行返されることもあれば、数行返されることもあります。

SELECT * FROM A WHERE ID = '<something>'

さらに 2 つのテーブル B と C があるとします。どちらにも A のような ID 列があります。また、A の ID の一部は B または C にもあります。B に存在する ID は C に存在できません。そして、A のすべての ID B または C のいずれかに存在します。

B と C には、同じ SELECT で A に結合したい追加情報が含まれています。私の問題は、彼らが追加の情報しか提供しないということです。出力に余分な行を入れたくない..

より明確にするために、A からの選択は 100 行の出力を返します。B テーブルを左/右/内側に結合すると、おそらく、出力される行数が少なくなります。Cに参加しても同じです。

そして最後に、私の質問は次のとおりです。テーブル B に存在する ID でのみテーブル B を結合する方法はありますか? (そして、同じ SELECT.... ステートメントでそれをしたいと思います。)

4

2 に答える 2

1

出力に余分な行が必要ない場合は、次のようにすることができます。

select *
from A join
     (select B.*
      from B
      group by B.id
     ) B
     on A.id = B.id;

これは、それぞれに対して B から任意の値を選択し、idそれらを結合して に戻しAます。これは、あなたの望むことですか?

于 2013-09-10T22:45:39.173 に答える
0

A と 2 つの "Select MAX" の間に左結合を作成する必要があるようです: 1 つはテーブル B から、もう 1 つはテーブル C からです。

また、テーブル A の ID を「重複」させたくない場合は、テーブル A の「グループ化」が役立ちます。

于 2013-09-10T21:49:17.667 に答える