首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否在一次查询中选择主记录及其所有相关的外部详细记录?

是否在一次查询中选择主记录及其所有相关的外部详细记录?
EN

Stack Overflow用户
提问于 2009-07-20 10:46:34
回答 2查看 191关注 0票数 1

我有一张桌子,可能有数千人(也许是数百万人?)记录的数量。它基本上是一个审计跟踪表,存储特殊的日志条目。它被称为“日志”。

还有一个名为"LogsExtended“的相关表,它为日志表中的每个条目存储零个或多个附加记录。

有一个外键关系设置,包括删除级联等。

我正在对Logs表执行SELECT操作,以选择特定时间范围内发生的所有记录,比如“最近30天”。

但是,我想以某种方式同时选择LogsExtended表中的相关外来记录。目的是将此查询的结果填充到具有正确DataRelation设置的DataSet中。

我尝试过使用各种JOIN子句,但它们都可能导致错误的行为--日志中的条目对于LogsExtended表中的每个相关记录都是重复的。

我真的希望避免明显的后备解决方案,即首先查询日志表,然后为每个结果运行一个额外的查询,以获得LogsExtended记录。这让我觉得非常浪费,可能会导致运行数千个查询。

我想我有点小题大做了,但我就是搞不明白。

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-07-20 11:01:36

您需要使用左连接,否则它将不会显示日志中没有int LogExtended项的记录。这样的话

代码语言:javascript
运行
复制
DECLARE @StartDate DATETIME,
        @EndDate DATETIME

SELECT  @StartDate = '01 Jun 2009',
        @EndDate = '30 Jun 2009'

SELECT  *
FROM    Logs l LEFT JOIN
        LogsExtended le ON l.LogID = le.LogID
WHERE   l.Date BEYWEEN @StartDate AND @EndDate

如果需要2个结果集,则需要执行以下查询

代码语言:javascript
运行
复制
DECLARE @StartDate DATETIME,
        @EndDate DATETIME

SELECT  @StartDate = '01 Jun 2009',
        @EndDate = '30 Jun 2009'

SELECT  l.*
FROM    Logs l 
WHERE   l.Date BEYWEEN @StartDate AND @EndDate

SELECT  le.*
FROM    Logs l INNER JOIN
        LogsExtended le ON l.LogID = le.LogID
WHERE   l.Date BEYWEEN @StartDate AND @EndDate

这将返回日期之间的所有日志,然后返回同一原始日志集的所有扩展日志

票数 1
EN

Stack Overflow用户

发布于 2009-07-20 10:52:15

在一对多关系中,join的本质是将“一”表中的行乘以与“多”表中的行的倍数。您可以使用的一种方法是只获取Logs表中的LogID,以及LogsExtended表中的所有剩余信息:

代码语言:javascript
运行
复制
SELECT L.ID, E.*
FROM Logs L, LogsExtended E
WHERE 
L.ID = E.ID
AND
(Some date limitation on the Logs table)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1152843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档