2017-07-18 18 views
2

私は現在、参加したい2つのテーブルの出力を取得しようとしていますが、これを解決する方法については私の考えでブロックしているようです。テーブル左結合

表1には、一意のIDを持つ製品があります。

ID | (other info) 
----------------- 
AA | 
BB | 
CC | 

表2は、FKとして、表1の一意のID、ならびにモデル番号を持っており、私は表1、表2に参加したい部分のコードは、その結果、他の情報の多くを有します可能性のあるコンステレーションに従う:

ID | FK | model number | part-code 
----------------------------------- 
01 | AA | model0001 | part923 
02 | AA | model0001 | 
03 | AA |    | part923 
04 | BB | model0002 | 
05 | BB |    | part876 
06 | CC |    | part551 

したがって、表2の情報は非常に散在しており、必ずしも完全ではありません。私はまた、与えられたFKに対して、モデル番号とパートコードがすべてのエントリーにわたって同じであると仮定したくありません(与えられたFKに複数のバリアントがある場合、ランダムであっても1つのエントリーが必要です) 。

私が達成しようとしているのは、表1から抽出したすべての情報を得ることであり、表2には常に一意のID(= FK)があり、モデル番号と部分 - 存在する場合は、重複を作成せずにテーブルにコードします。したがって、上記の例は、次の出力を与えるべきです。

ID | model number | part-code | (other info from table 1) 
--------------------------------------------------------- 
AA | model0001 | part923 | 
BB | model0002 | part876 | 
CC |    | part551 | 

私はまた、表2は、(数百万のエントリ)は極めて大きく、言及する必要がありますし、私は、この表には、かなり大きいです。表1からIDを持つ以外のデータを一致させる方法がありません - の効率的な方法をこれに近づくことが必要です。 これを読んでいただきありがとうございました。これにアプローチする方法を理解できるようになりました。 ベスト、 ジョナス

答えて

1

table1にすべてのレコードを取得するには、一致するレコードがtable2になるようにOUTER JOINが必要です。

table2から1ヒットあたり1レコードしか取得するのは難しいです。この集約サブクエリは、目的の出力を生成します。この解は、table2の単一のレコードには存在しない(model_number,part_code)の置換を生成することができることに留意されたい。あなたのサンプル結果セットがBBのために示すものであるので、それは大丈夫だと思います。 「何百万ものエントリ」のパフォーマンスは遅くなる可能性があります。しかし、それは(別の)チューニングの問題です。

select t1.id 
     , t2.model_number 
     , t2.part_code 
     , t1.whatever 
     , t1.blah 
     , t1.etc 
from table1 t1 
left outer join (select fk 
         , max (model_number) as model_number 
         , max (part_code) as part_code 
        from table2 
        group by fk) t2 
    on t1.id = t2.fk 
order by t1.id 
/
+0

ありがとう、これはうまくいっていますが、リソースが過剰に使用されたために実行中にジョブが強制終了されました。私はこれを改善する方法を見つけることを試みる! – curzic

0

あなたは役立ちます。このSQL

SELECT t1.ID, t2.model_number, t2.part-code FROM table1 t1 
LEFT JOIN table2 t2 ON t1.ID = t2.FK 
GROUP BY t1.ID 

希望を試すことができます!

+0

OPでは、IDだけでなく、表1のすべての情報が必要です。それはそれらを提供しますか? –

+0

これは私が現在行っていることです(ポール・カラムが述べたように追加情報が必要なので少し修正されていますが)。テーブル2のFKごとに複数の行があるインスタンスに対して重複行を受け取るため、グループ化された単純な左結合は機能しません。 – curzic