两个表 主表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 DESC) and 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编程环境中,主从表(Master-Detail)是一种常见的数据展示方式,它用于处理一对多的关系,例如一个订单可以包含多个商品项。在这个"Delphi主从表自创实例"中,我们将深入探讨如何在Delphi中实现这种关系,...
在数据库设计中,主从表(也称为父子表或一对多关系)用于表示两个表之间的关系,其中一个表(主表)有一条记录对应多个记录在另一个表(从表)中。例如,一个员工表(主表)可能包含多个项目表(从表),每个员工...
从表中需要有一个外键字段,该字段与主表的主键字段相匹配。 5. **设置外键关系**:在从表的TClientDataSet中,添加一个新字段作为外键,该字段的值应与主表的主键字段相同。在Constraints属性中,添加一个...
在实现主从表关联时,我们通常会有一个主表(如客户表)和一个或多个从表(如订单表)。主表的数据会在`DataGridView`的一个面板中显示,而从表的数据则在另一个嵌套的`DataGridView`中显示,这通常通过`...
接下来,我们需要创建一个继承自`DbContext`的类,用于管理数据库连接和实体。在这个类中,我们可以定义DbSet属性来表示我们的实体集合,并通过`OnModelCreating`方法配置表之间的关系。 ```csharp public class...
3. **查询数据**:使用LINQ编写查询,获取主表(如Orders)的所有记录,并同时联接从表(如OrderDetails),形成一个包含主从表信息的数据集。 4. **数据绑定**:在ASP.NET页面中添加Repeater控件,分别为主表和从...
主从表关系指的是一个主表(Master Table)与一个或多个从表(Slave Table)之间的关联。主表通常包含唯一标识记录的关键字段,而从表则通过这些关键字段与主表相关联,以扩展或细化主表中的信息。这种关系在关系型...
Delphi作为一个强大的RAD(快速应用程序开发)工具,提供了丰富的组件和库来简化数据库交互,其中包括对主从表(Master-Detail)的支持。主从表是一种数据组织方式,通常用于展示一对多的关系,如订单与订单详情、...
这可能涉及多个查询,比如一个查询获取主表,另一个查询根据主表的ID获取从表数据。 5. **扩展DataGrid功能**:为了展示从表数据,可能需要自定义DataGrid的行模板,添加按钮或链接,当用户点击时,显示或隐藏与...
1. **配置数据源**:首先,我们需要创建两个ADOQuery组件,一个用于主表数据,另一个用于从表数据。主表的ADOQuery通常会连接到包含主键的表,而从表的ADOQuery则连接到包含外键的表。 2. **设置SQL查询**:为每个...
总之,`fastrepart`、`ADODataSet`和分组方法共同构成了一个高效且灵活的主从表处理框架,使得在数据库应用中管理和展示相关联的数据变得更加便捷。通过熟练掌握这些工具和技术,开发者可以创建出更健壮、性能更高的...
- **DataGridView**:Windows Forms中的一个用于显示二维表格数据的控件,支持多种数据源,如`DataTable`、`BindingList<T>`等。 - **BindingSource**:用于连接数据源和控件的组件,能够简化数据绑定过程,并提供...
要实现主从表,我们需要两个ASPxGridView控件,一个用于主表,另一个用于从表。主表通常会有一个或多个可以链接到从表的字段,这些字段将作为连接两个表格的键。 1. 数据源绑定:为ASPxGridView设置数据源是首要...
在.NET MVC框架中,开发一个主从表浏览的界面是一个常见的需求,这通常涉及到数据的层级展示和交互。本项目“嵌套Repeater实现主从表浏览(MVC)”利用Visual Studio 2008和Northwind数据库,提供了一个有效的解决...
5. **实时更新**:为了实现实时的模糊查询,你可以创建一个事件处理程序,监听主表的OnDataChange事件。当主表中的数据发生变化时,根据新的条件重新执行从表的查询。 6. **数据绑定和更新**:确保在界面上的数据...
2. 查询主表:创建一个CRecordset对象,用于执行SQL查询并获取结果集。对于主表,通常包含唯一标识符(如ID)和其他关键字段。例如: ```cpp CRecordset rs(&db); rs.m_strSQL = _T("SELECT * FROM 主表"); if (!rs...
本Demo——"cxGrid主从表Demo"显然是一个关于如何在Delphi中实现cxGrid主从表功能的实例教程。 主从表是一种常见的数据库数据展示方式,主表通常包含一组主要记录,从表则关联这些主要记录,显示与之相关的详细信息...
本资源“RDLC_建立主从表显示源码”提供了实现主从表显示的代码示例,对于初学者来说是一个很好的学习资料。 主从表是数据库中常见的关系模型,通常在报表中用来展示一对多或多对一的数据关系。例如,一个订单(主...
以上代码创建了一个数据库连接,并创建了游标对象,用于执行SQL查询和操作。 总结来说,导出Excel数据、建立主从表示例以及连接DATABASE是IT工作中常见的任务。熟练掌握这些技能可以帮助我们更有效地管理、分析和...
确保主表和从表的查询都在同一个事务中执行,以保持数据一致性。 4. **创建客户端接口**: 在客户端,我们需要一个TClientDataSet来代表主表,另一个TClientDataSet代表从表。通过TDataSource和TDBGrid等组件,...