`
sophia_230
  • 浏览: 120669 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类
最新评论

一个关于主从表的自连接查询

阅读更多
两个表 主表userinfo 从表postinfo 通过userid关联 一对多的关系
userinfo表
userid username
1 jecray    
2 yang      
3 chen      
4 yc        
NULL NULL

postinfo表
PostID| Title |userid|content  |order
1 title1     1 content1   5
2 title2     2 content2   4
3 title3     1 content3   2
4 title4     1 content4   1
5 title5     3 content5   5
6 title6     3 content6   8
7 title7     4 content7   1
8 title8     2 content8   2
9 title9     2 content9   8
NULL NULL NULL NULL NULL
要求: 通过一条sql语句得出 每个用户发表post的orderid值最大的记录
如果orderid是时间就是得出每个用户发表最新帖子的相关信息, 该条信息包括两个表中的信息.

期望结果如下
postid   title     userid   content   orderid   username
1        title1        1    content1      5       jecray    
6        title6        3    content6      8       chen      
7        title7        4    content7      1       yc        
9        title9        2    content9      8       yang   

分两步走:
首先通过sql自连接得出postinfo中的每个用户的orderid值最大的记录
<!---->SELECT DISTINCT a.*
FROM postinfo a  where a.postid IN
          (
SELECT TOP 1 postinfo.postid
         
FROM postinfo
         
WHERE postinfo.userid = a.userid
         
ORDER BY orderid DESC)

在每行的检索中匹配指定条件的记录, 如果换成top 2 可以检索头两条orderid最大的记录

然后进行userinfo和postinfo的连接
<!---->SELECT DISTINCT a.*,b.*
FROM postinfo a inner join userinfo b on a.postid IN
          (
SELECT TOP 1 postinfo.postid
         
FROM postinfo
         
WHERE postinfo.userid = a.userid
         
ORDER BY orderid DESCand a.userid = b.userid

便可得出上述效果.自连接的效率不知道怎么样, 反正不会很快了.

如果在oracle里面 还可以通过这样的形式实现
<!---->select * from postinfo where (uerid,orderid) in(select userid,max(orderid) as orderid from postinfo group by USERID)
可惜在sqlserver中不能通过

只要涉及到一张表中的同个字段之间或不同字段之间具有逻辑关系 就有可能用到自连接查询
分享到:
评论

相关推荐

    Delphi主从表自创实例

    在Delphi编程环境中,主从表(Master-Detail)是一种常见的数据展示方式,它用于处理一对多的关系,例如一个订单可以包含多个商品项。在这个"Delphi主从表自创实例"中,我们将深入探讨如何在Delphi中实现这种关系,...

    使用DataGridView控件实现主从表

    在数据库设计中,主从表(也称为父子表或一对多关系)用于表示两个表之间的关系,其中一个表(主表)有一条记录对应多个记录在另一个表(从表)中。例如,一个员工表(主表)可能包含多个项目表(从表),每个员工...

    利用delphi中的内存表来制作主从表

    从表中需要有一个外键字段,该字段与主表的主键字段相匹配。 5. **设置外键关系**:在从表的TClientDataSet中,添加一个新字段作为外键,该字段的值应与主表的主键字段相同。在Constraints属性中,添加一个...

    C#中DataGridView主从表例子

    在实现主从表关联时,我们通常会有一个主表(如客户表)和一个或多个从表(如订单表)。主表的数据会在`DataGridView`的一个面板中显示,而从表的数据则在另一个嵌套的`DataGridView`中显示,这通常通过`...

    Entity Framework主从表使用

    接下来,我们需要创建一个继承自`DbContext`的类,用于管理数据库连接和实体。在这个类中,我们可以定义DbSet属性来表示我们的实体集合,并通过`OnModelCreating`方法配置表之间的关系。 ```csharp public class...

    Repeater 实现主从表浏览

    3. **查询数据**:使用LINQ编写查询,获取主表(如Orders)的所有记录,并同时联接从表(如OrderDetails),形成一个包含主从表信息的数据集。 4. **数据绑定**:在ASP.NET页面中添加Repeater控件,分别为主表和从...

    简单学习主从表

    主从表关系指的是一个主表(Master Table)与一个或多个从表(Slave Table)之间的关联。主表通常包含唯一标识记录的关键字段,而从表则通过这些关键字段与主表相关联,以扩展或细化主表中的信息。这种关系在关系型...

    DELPHI 主从表控制

    Delphi作为一个强大的RAD(快速应用程序开发)工具,提供了丰富的组件和库来简化数据库交互,其中包括对主从表(Master-Detail)的支持。主从表是一种数据组织方式,通常用于展示一对多的关系,如订单与订单详情、...

    silverlight使用主从表信息显示datagrid

    这可能涉及多个查询,比如一个查询获取主表,另一个查询根据主表的ID获取从表数据。 5. **扩展DataGrid功能**:为了展示从表数据,可能需要自定义DataGrid的行模板,添加按钮或链接,当用户点击时,显示或隐藏与...

    adoquery+fastreport+主从表

    1. **配置数据源**:首先,我们需要创建两个ADOQuery组件,一个用于主表数据,另一个用于从表数据。主表的ADOQuery通常会连接到包含主键的表,而从表的ADOQuery则连接到包含外键的表。 2. **设置SQL查询**:为每个...

    fastrepart实现主从表

    总之,`fastrepart`、`ADODataSet`和分组方法共同构成了一个高效且灵活的主从表处理框架,使得在数据库应用中管理和展示相关联的数据变得更加便捷。通过熟练掌握这些工具和技术,开发者可以创建出更健壮、性能更高的...

    DataGridView显示主从表

    - **DataGridView**:Windows Forms中的一个用于显示二维表格数据的控件,支持多种数据源,如`DataTable`、`BindingList&lt;T&gt;`等。 - **BindingSource**:用于连接数据源和控件的组件,能够简化数据绑定过程,并提供...

    ASPxGridview主从表

    要实现主从表,我们需要两个ASPxGridView控件,一个用于主表,另一个用于从表。主表通常会有一个或多个可以链接到从表的字段,这些字段将作为连接两个表格的键。 1. 数据源绑定:为ASPxGridView设置数据源是首要...

    嵌套 Repeater 实现主从表浏览(MVC)

    在.NET MVC框架中,开发一个主从表浏览的界面是一个常见的需求,这通常涉及到数据的层级展示和交互。本项目“嵌套Repeater实现主从表浏览(MVC)”利用Visual Studio 2008和Northwind数据库,提供了一个有效的解决...

    主从表模糊查询delphi 数据库

    5. **实时更新**:为了实现实时的模糊查询,你可以创建一个事件处理程序,监听主表的OnDataChange事件。当主表中的数据发生变化时,根据新的条件重新执行从表的查询。 6. **数据绑定和更新**:确保在界面上的数据...

    VC 操作 SQL Server 主从表

    2. 查询主表:创建一个CRecordset对象,用于执行SQL查询并获取结果集。对于主表,通常包含唯一标识符(如ID)和其他关键字段。例如: ```cpp CRecordset rs(&db); rs.m_strSQL = _T("SELECT * FROM 主表"); if (!rs...

    cxGrid主从表Demo.rar

    本Demo——"cxGrid主从表Demo"显然是一个关于如何在Delphi中实现cxGrid主从表功能的实例教程。 主从表是一种常见的数据库数据展示方式,主表通常包含一组主要记录,从表则关联这些主要记录,显示与之相关的详细信息...

    RDLC_建立主从表显示源码

    本资源“RDLC_建立主从表显示源码”提供了实现主从表显示的代码示例,对于初学者来说是一个很好的学习资料。 主从表是数据库中常见的关系模型,通常在报表中用来展示一对多或多对一的数据关系。例如,一个订单(主...

    导出EXCEL和建立主从表示例

    以上代码创建了一个数据库连接,并创建了游标对象,用于执行SQL查询和操作。 总结来说,导出Excel数据、建立主从表示例以及连接DATABASE是IT工作中常见的任务。熟练掌握这些技能可以帮助我们更有效地管理、分析和...

    datasnap主从表应用

    确保主表和从表的查询都在同一个事务中执行,以保持数据一致性。 4. **创建客户端接口**: 在客户端,我们需要一个TClientDataSet来代表主表,另一个TClientDataSet代表从表。通过TDataSource和TDBGrid等组件,...

Global site tag (gtag.js) - Google Analytics