2017-02-11 6 views
0

これはロードされた質問かもしれません。私は2つの条件のID上の2つのテーブルに参加したい:最初の3つの文字はまた 正確な文字列または切り捨てられた文字列にテーブルを結合する

と一致した後

  1. 完全一致
  2. 文字を、テーブルを表示するための良い方法はありますか?

    表1:

    Comp ID Year  
    94372  2016  
    P1983  2011  
    874324 2015  
    0342135 2013  
    732423 2015  
    

    表2:

    ID   User   
    30094372 TYVSW  
    2000342135 PFDBE  
    100732423 PLECD  
    P1983  ASNWQ  
    

    結合テーブル

    T1CompID T1Year T2ID T2User   
    94372 2016 30094371 TYVSW   
    P1983 2011 P1983 ASNWQ   
    874324 2015 Null Null    
    0342135 2013 2000342135 PFDBE   
    732423 2015 100732423 PLECD   
    
+1

使用しているデータベースサーバーについては言及していません。 JOINでは、SUBSTRINGなどの機能を使用できます。または、文字を最初に保持するもう1つの列(おそらく計算列)を作成し、JOINでORを使用します。 – endo64

+0

どのDBMSを使用していますか? –

+0

私はOracleを使用しています。 – Sydonius

答えて

0

正確に一致するいずれかの最初のテーブルからIDの条件にLEFT JOINを実行2番目のテーブルのID、または最初のテーブルのIDがfの部分文字列と一致する2番目のテーブルの第1キャラクターSQL Serverの場合

SELECT t1."Comp ID" AS T1CompID, 
     t1.Year AS T1Year, 
     t2.ID AS T2ID, 
     t2.User AS T2User 
FROM table1 t1 
LEFT JOIN table2 t2 
    ON t1."Comp ID" = t2.ID OR    -- exact match 
     t1."Comp ID" = SUBSTRING(t2.ID, 4) -- match from fourth character of t2.ID 

あなたは、このカラム名をエスケープする[Comp ID]を使用する必要があります。

0

は、パフォーマンスのために、この

 SELECT * FROM tb1 t1 
     LEFT JOIN tb2 t2 
     ON IF(length(t1.ID) = length(t2.ID),t1.ID = t2.ID,substring(t2.ID,4) = t1.ID); 

     +---------+------+------------+-------+ 
     | ID  | Year | ID   | User | 
     +---------+------+------------+-------+ 
     | 94372 | 2016 | 30094372 | TYVSW | 
     | 0342135 | 2013 | 2000342135 | PFDBE | 
     | 732423 | 2015 | 100732423 | PLECD | 
     | P1983 | 2011 | P1983  | ASNWQ | 
     | 874324 | 2015 | NULL  | NULL | 
     +---------+------+------------+-------+ 
    5 rows in set (0.00 sec) 
0

を試してみてください、あなたは、2つの左を使用する場合があります参加する:

select t1.compid, t1.year, 
     coalesce(t2e.id, t2p.id) as t2id 
     coalesce(t2e.user, t2p.user) as t2.user 
from table1 t1 left join 
    table2 t2e 
    on t1.compid = t2.compid left join 
    table2 t2p 
    on t1.compid = substring(t2p.id, 4, 100) and 
     t2e.compid is null; 

以降4番目の文字から値を取得するための正確な表現では、データベースからのビットを変化させますデータベース。

このアプローチの利点の1つは、2番目のテーブルに一致する2つの行がある場合でも完全一致が返されることです。

関連する問題