首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >SQL查询:根据多个表中的条件检索记录

SQL查询:根据多个表中的条件检索记录
EN

Stack Overflow用户
提问于 2012-04-11 14:30:31
回答 1查看 2.5K关注 0票数 0

设置

我正在使用Server来跟踪生产环境中的各种情况。数据库有两个表:

  1. 状态表:它跟踪这些案例的状态,其中一列包含表示案例状态的整数代码。代码大于0的所有情况都是“生产中”的,而代码小于或等于0的情况要么是“完全”的,要么是"canceled".
  2. Log表:这跟踪了在特定情况下发生了哪些更改以及何时发生了这些更改。“什么”方面被捕获为字符串和代码。"when“是一个日期时间字段.

问题/任务/问题

我想查询所有在生产中的案例,以及在过去两天内完成或取消的所有案例,。在日志中,我有一个datetime列和一个特定于取消或完成一个案例的代码。我假设查询可能会JOIN日志中的任何一种情况,这些代码中的任何一种都有日期时间在48小时之前。但我不太确定该怎么做。我查询的第一部分(获取正在生成的案例)如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
SELECT * FROM test.dbo.status WHERE status > 0

任何帮助都将不胜感激。提前感谢!

更新以澄清两件事:

  1. I希望查询返回status表中的所有列,以查找符合上述条件的记录,而不仅仅是ID或其他内容。

  1. 表结构:

创建表dbo.status创建表status

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-11 14:36:28

考虑到你没有提供任何结构,我会从这样的事情开始。

查询1:返回的记录数将是来自LogTable的匹配记录数

代码语言:javascript
代码运行次数:0
运行
复制
SELECT StatusTable.ID, LogTable.When, etc etc etc.
FROM StatusTable INNER JOIN LogTable
  ON StatusTable.ID = LogTable.ID
WHERE StatusTable.status > 0
  OR (LogTable.WhatCode = 97   --Assumes 97 is your desired code.
  AND LogTable.When >= dateadd(hh, -48, GetDate()))

添加了

查询2:使用子查询而不是连接从LogTable获取所需的ID。(您也可以查看EXISTS运算符而不是IN)

代码语言:javascript
代码运行次数:0
运行
复制
SELECT StatusTable.ID, StatusTable.otherField, etc etc
FROM StatusTable
WHERE StatusTable.status > 0 
  OR StatusTable.ID IN (SELECT LogTable.ID FROM LogTable WHERE LogTable.WhatCode = 97   --Assumes 97 is your desired code.
      AND LogTable.When >= dateadd(hh, -48, GetDate()))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10108016

复制
相关文章

相似问题

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