1

以下のように、LeftTable と RightTable という名前の 2 つのテーブルがあります。

左テーブル

obsid    Name      Value                 
1        Ronak     A                      
2        Aakash    B                      
3        Pankti    C                      
4        Sanket    D     

右テーブル

obsid        Name       Value
1            Jhone      F
2            Isabella   M
3            Jonathan   L
4            javafx     p                 

今、私が何らかの条件で参加したとき、出力は以下のようになります

結果テーブル

obsid    Name      Value                  obsid        Name       Value
-------------------------------------------------------------------------
1        Ronak     A                      1            Jhone      F
1        Ronak     A                      2            Isabella   M
1        Ronak     A                      3            Jonathan   L
1        Ronak     A                      4            javafx     p
2        Aakash    B                      2            Isabella   M
2        Aakash    B                      3            Jonathan   L 
2        Aakash    B                      4            javafx     p
3        Pankti    C                      3            Jonathan   L
3        Pankti    C                      4            javafx     p
4        Sanket    D                      4            javafx     p

この Left Join は、アプリケーションで一対多の関係を実現するのに役立ちます。

私のアプリケーションでは、左結合条件は動的です。そのため、ここで示したのは単なる例です。上記の例の左結合条件が LeftTable.Obsid <= RightTable.Obsid であるとします。今、1 対 1 の関係を実現したいと考えています。1 対 1 の関係とは、righttable レコードのいずれかが lefttable レコードと一度リンクされた場合、その righttble レコードは他の lefttable レコードとリンクできないことを意味します。

上記の例の場合、1対1の出力は次のとおりです

obsid    Name      Value                  obsid        Name       Value
1        Ronak     A                      1            Jhone      F
2        Aakash    B                      2            Isabella   M
3        Pankti    C                      3            Jonathan   L
4        Sanket    D                      4            javafx     p

私はこの機能を2つの方法で実現しました:

  1. カーソルの使用
  2. 選択クエリを使用して 1 つずつレコードをフェッチする

私のアプリケーションでは、データベース テーブルは動的です。そのため、1 つずつレコードを取得して処理するのに時間がかかるため、数百万のレコードの処理には時間がかかりすぎます。

単一選択クエリで一対一の関係を実現する方法はありますか??

レコードを 1 つずつ取得することを避けたいのですが、Mysql データベースを使用しています。

私を助けてください。

4

1 に答える 1

1

内部結合を使用するだけで、例に示されている必要な出力を実現できます。

select * from LeftTable L inner join RightTable R
on L.obsid=R.obsid

しかし、左のテーブルに重複する obsid がある場合は、以下のクエリを使用できます

   select  A.obsid,A.Name,A.Value, R.obsid,R.Name,R.Value from(
     select *,row_number() over (partition by obsid order by obsid ) as row_num 
    from LeftTable)A
     inner join RightTable R
     on A.obsid=R.obsid
     where A.row_num=1

これがあなたの期待するものであることを教えてください

于 2012-06-25T06:46:35.693 に答える