2

両方のテーブルを結合し、Col1 と Col11 を比較して、Table1 にない最初のテーブル データと 2 番目のテーブル データを取得します。すべての ID (Col1 と Col11) が一緒になる必要があるため

表1

Col1      Col2            Col3                  Col4      Col5            Col6 
1345653   330760137950    2012-07-09 21:40:29   1345653   331760137950    1341895229
1345653   110909316904    2012-07-09 21:29:06   1345653   111909316904    1341894546
1345653   221065796761    2012-07-09 19:31:48   1345653   221065796761    1341887518

表2

Col11        Col22         Col33                  
1345653      330760137950   2012-07-09 21:40:29     
1345653      110909316904   2012-07-09 21:29:06     
1345653      221065796761   2012-07-09 19:31:48     
1345653    **150851771618**   2012-07-09 18:57:33 

上記の 2 つのテーブル データを見ると、Table2meansの最後の行が にCol22-150851771618ありませんTable1。したがって、以下の出力のように、とを結合して Col22 が欠落しているためTable1、完全なデータと最後の行を表示する必要があります。Table2Table1Col1Col11

1345653   330760137950    2012-07-09 21:40:29   1345653   331760137950    1341895229
1345653   110909316904    2012-07-09 21:29:06   1345653   111909316904    1341894546
1345653   221065796761    2012-07-09 19:31:48   1345653   221065796761    1341887518
1345653 **150851771618**  2012-07-09 18:57:33   NULL       NULL           NULL

JOINを結合してこれを行うにはどうすればよいですか? 私はこれについて多くの混乱を抱えています。誰でも私を助けることができますか?Col1Col11

更新:- いくつかのシナリオ

表1

Col1            Col2            Col3                   Col4       Col5                Col6
1345653     330760137950    2012-07-09 21:40:29     1345653     331760137950        1341895229
1345653     110909316904    2012-07-09 21:29:06     1345653     111909316904        1341894546
1345653     221065796761    2012-07-09 19:31:48     1345653     221065796761        1341887518

704318001   320941581940    2012-07-09 14:44:48     704318001   321941581940        1341870288 

表2

Col11        Col22         Col33                   Col44   Col55   Col66
1345653      330760137950   2012-07-09 21:40:29     NULL    NULL    NULL
1345653      110909316904   2012-07-09 21:29:06     NULL    NULL    NULL
1345653      221065796761   2012-07-09 19:31:48     NULL    NULL    NULL
1345653    **150851771618**   2012-07-09 18:57:33   NULL    NULL    NULL

704318001  **290738585064**    2012-07-09 14:36:49     NULL    NULL    NULL

したがって、出力は次のようになります。このIDの意味は、1345653すべてのレコードが同じ場所にあり、704318001. したがって、出力を見ると、すべてが一緒1345653になっていて、すべて704318001が一緒になっています。

1345653   330760137950    2012-07-09 21:40:29   1345653   331760137950    1341895229
1345653   110909316904    2012-07-09 21:29:06   1345653   111909316904    1341894546
1345653   221065796761    2012-07-09 19:31:48   1345653   221065796761    1341887518
1345653 **150851771618**  2012-07-09 18:57:33   NULL       NULL           NULL


704318001   320941581940    2012-07-09 14:44:48     704318001   321941581940        1341870288 
704318001  **290738585064**    2012-07-09 14:36:49     NULL    NULL    NULL

基本的に、最初の完全なテーブルと、Table1 にデータがない 2 番目のテーブルを取得します。

4

4 に答える 4

4

動作するLEFT JOIN必要があります..

しかし、データに基づいて、 に参加する必要があると思います。 と にCol22Col2一意Col1Col11値がないため、それらがどのように関連付けられているかわかりません。

SELECT t2.Col11, t2.Col22, t2.Col33, t1.Col4, t1.Col5, t1.Col6
FROM 
    Table2 t2 LEFT JOIN
    Table1 t1 ON t1.Col2 = t2.Col22
于 2012-07-13T22:35:56.020 に答える
1

ご覧のとおり、table1 の最初の 3 列で一致が見つからない table2 から行を追加する必要があります。その効果のために、 union allexistsを組み合わせることができます。データベースがサポートしている場合は、 existsの代わりに使用できます。

select Col1, Col2, Col3, Col4, Col5, Col6
  from table1
union all
select Col11, Col22, Col33, null, null, null
  from table2
 where not exists (select null
                     from table1
                    where table1.col1 = table2.col11
                      and table1.col2 = table2.col22
                      and table1.col3 = table2.col33)

明確化後の更新: ユニオンオールと左結合を使用できる場合、この SQL FIDDLE が役立ちます:

select buyer_id, item_id, created_time, user_id, product_id, timestamps
  from TestingTable1
union all
select t2.buyer_id, t2.item_id, t2.created_time, null, null, null
  from TestingTable2 t2
  left join TestingTable1 t1
    on t1.buyer_id = t2.buyer_id
   and t1.item_id = t2.item_id
   -- remove this line if you identify duplicated record
   -- by buyer and item only
   and t1.created_time = t2.created_time
 where t1.buyer_id is null
于 2012-07-13T23:27:53.893 に答える
0

なぜ単純に-

SELECT * FROM Table2;

それ以外の場合は、質問をより明確にしてください。

于 2012-07-13T22:42:29.557 に答える
0

期待される出力が正確に何であるかはよくわかりません。たとえば、部分的な外部結合または完全な外部結合だけが必要ですか? 完全な外部結合が必要であり、これでうまくいく可能性があると仮定します (T-SQL 構文):

select
    coalesce(t1.col1, t1.col11),
    coalesce(t1.col2, t1.col22),
    coalesce(t1.col3, t1.col33),
    coalesce(t1.col4, t1.col44),
    coalesce(t1.col5, t1.col55),
    coalesce(t1.col6, t1.col66),
from
    Table1 t1
    full outer join Table2 t2 on t2.Col22 = t1.Col2

これがあなたが必要とするものであることを願っています。列 Col2-Col22 の両方のテーブルのすべての行を結合し、Table1 の各列ペアの値を表示し、null 値がある場合は Table2 の値を表示する必要があります。

編集: Col1-Col11 のテーブルを結合することはできません。実際、この例ではデカルト積が生成されます。ただし、データの実際の意味によっては、Col1=Col11 と Col2=Col22 の両方で結合すると便利な場合があります。

于 2012-07-13T22:40:03.123 に答える