1

結合する必要のあるテーブルが3つあります。最初の2つは簡単で、同じキーに基づいています。単純な外部結合が機能します。3番目は注意が必要です。同様のキーがありますが、1つのキーの左側14で一致する必要があります。これは私が望まない重複を生成します。基本的に、IDと正しく一致するTOP 1FROMTable3が必要です。

T-SQLの使用。

テーブルは大きくて複雑なので、サンプルデータと現在実行しているクエリを含むテーブルの簡単な例を以下に概説します。

表1

ID1          ID2                 Field1    Field2    Field3    Field4
0000000000   00000000000000a     Info1     Info2     Info3     Info4
2222222222   11111111111111b     Info1     Info2     Info3     Info4
1111111111   22222222222222c     Info1     Info2     Info3     Info4

表2

ID1          ID2                 Field1    Field2  
0000000000   00000000000000a     Info5     Info6  
2222222222   11111111111111b     Info5     Info6  
1111111111   22222222222222c     Info5     Info6 

テーブル

ID1          ID2                 Field1    
0000000000   00000000000000a     Info7 
0000000000   00000000000000b     Info7  
0000000000   00000000000000c     Info7  
2222222222   11111111111111b     Info7  
2222222222   11111111111111d     Info7  
1111111111   22222222222222c     Info7  

クエリ

SELECT
Table1.ID1,
Table1.ID2,
Table1.Field1,
Table1.Field2,
Table1.Field3,
Table1.Field4,
Table2.Field1,
Table2.Field2,
Table3.Field1
FROM Table1
LEFT JOIN Table2
ON Table1.ID1=Table2.ID2 AND Table1.ID2=Table2.ID2
LEFT JOIN Table3
ON Table1.ID1=Table3.ID2 AND LEFT(Table1.ID2,14)=LEFT(Table3.ID2,14)

私が得る応答は

0000000000 00000000000000a Info1 Info2 Info3 Info4 Info5 Info6 Info7
0000000000 00000000000000a Info1 Info2 Info3 Info4 Info5 Info6 Info7
0000000000 00000000000000a Info1 Info2 Info3 Info4 Info5 Info6 Info7
2222222222 11111111111111b Info1 Info2 Info3 Info4 Info5 Info6 Info7
2222222222 11111111111111b Info1 Info2 Info3 Info4 Info5 Info6 Info7
1111111111 22222222222222c Info1 Info2 Info3 Info4 Info5 Info6 Info7

私が欲しいのは

0000000000 00000000000000a Info1 Info2 Info3 Info4 Info5 Info6 Info7
2222222222 11111111111111b Info1 Info2 Info3 Info4 Info5 Info6 Info7
1111111111 22222222222222c Info1 Info2 Info3 Info4 Info5 Info6 Info7
4

2 に答える 2

2

私は推測して、mssqlを使用していると言います(トップなどを使用)ので、2005+を使用している場合はこれで問題なく動作します

SELECT
  Table1.ID1,
  Table1.ID2,
  Table1.Field1,
  Table1.Field2,
  Table1.Field3,
  Table1.Field4,
  Table2.Field1,
  Table2.Field2,
  t3.Field1
FROM Table1
LEFT JOIN Table2
  ON Table1.ID1=Table2.ID2 AND Table1.ID2=Table2.ID2
outer apply (select top 1 * from table3 where LEFT(Table1.ID2,14)=LEFT(Table3.ID2,14)) t3
于 2012-09-18T13:34:28.003 に答える
0

要件に何かが欠けている場合を除いて、それぞれID1に1つのレコードのみを返したい場合は、次のTable3ようなことができるはずです。

SELECT
    t1.ID1,
    t1.ID2,
    t1.Field1,
    t1.Field2,
    t1.Field3,
    t1.Field4,
    t2.Field1,
    t2.Field2,
    tb3.Field1
FROM Table1 t1
LEFT JOIN Table2 t2
    ON t1.ID1=t2.ID1 
    AND t1.ID2=t2.ID2
LEFT JOIN
(
    select min(id2) minid2, id1
    from Table3
    group by id1
) t3
    ON t1.ID1=t3.id1 
    AND LEFT(t1.ID2,14)=LEFT(t3.minid2,14)
left join table3 tb3
    on t3.minid2 = tb3.id2
    and t3.id1 = tb3.id1
于 2012-09-18T14:00:44.017 に答える