1

我有两个名为 LeftTable 和 RightTable 的表,如下所示

左表

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

这个左连接帮助我在我的应用程序中实现一对多关系。

左连接条件在我的应用程序中是动态的。所以这只是我在这里展示的一个例子。假设上例中的左连接条件是 LeftTable.Obsid <= RightTable.Obsid 现在我想实现一对一的关系。一对一关系意味着当任何右表记录与任何左表记录链接一次时,该右表记录不能与任何其他左表记录链接。

对于上面的示例,一对一的输出如下

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

我有两种方式实现这个功能:

  1. 使用光标
  2. 使用选择查询获取一条一条记录

数据库表在我的应用程序中是动态的。因此,虽然处理数百万条记录需要太多时间,因为一条一条地获取记录并对其进行处理需要时间。

有没有办法在单选查询中实现一对一关系?

我想避免一条一条地获取记录,我正在使用 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 回答