首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在匹配另一个select时编写查询以选择数据

如何在匹配另一个select时编写查询以选择数据
EN

Stack Overflow用户
提问于 2020-11-17 03:05:48
回答 4查看 56关注 0票数 0

TableA

代码语言:javascript
复制
Id, DateTime1
1, 2020-10-10
2, 2020-10-11
3, 2020-10-12

TableB

代码语言:javascript
复制
Id, Status
1, 1
1, 2
3, 1

如果我想从TableA中选择所有的行,其中在2020-10-10到2020-10-12之间的DateTime1,如果在TableA中的任何一行在TableB中的状态是1或2,我如何编写这个查询?

(2020-10-10至2020-10-12,任何一行为状态1或2)的预期结果如下:

代码语言:javascript
复制
Id, DateTime1
1, 2020-10-10
2, 2020-10-11
3, 2020-10-12

如果我将状态更改为(2020-10-10到2020-10-10-12,而任何一行为状态3),则不会选择任何行,因为在此期间没有任何行具有状态3。

如果我写

代码语言:javascript
复制
select * 
from TableA as A 
inner join TableB as B on A.Id = B.Id 
where A.DateTime1 >= '2020-10-10' 
  and A.DateTime1 <= '2020-10-12' 
  and B.Status = 1 
  or B.Status = 2

然后只选择Id、1和3,但我想要1、2和3。

如果我写:

代码语言:javascript
复制
select * 
from TableA, (select count(A.id) 
              from TableA as A 
              inner join TableB as B on A.Id = B.Id 
              where A.DateTime1 >= '2020-10-10' 
                and A.DateTime1 <= '2020-10-12' 
                and B.Status = 1 
                or B.Status = 2) as totals 
where DateTime1 >= '2020-10-10' 
  and DateTime1 <= '2020-10-12' 
  and totals  > 0

错误失败:Unknown column 'totals' in 'where clause'

EN

回答 4

Stack Overflow用户

发布于 2020-11-17 04:47:48

您可以使用子查询。例如:

代码语言:javascript
复制
SELECT * FROM TableA WHERE Id IN (SELECT Id from TableB WHERE Status>=1 AND Status<=2)

这将选择状态介于1和2之间的TableA中的所有行。

票数 0
EN

Stack Overflow用户

发布于 2020-11-17 04:57:52

尝试这个查询。根据给定的数据,我假设TableA和TableB与id列有外键关系。

代码语言:javascript
复制
select a.* from TableA a
join TableB b on a.id = b.id
where a.DateTime1 >= '2020-10-10' and a.DateTime1 <= '2020-10-12'
and b.Status in (1,2)
票数 0
EN

Stack Overflow用户

发布于 2020-11-17 05:17:35

也许我的问题不能正确解释。我找到了解决办法,但还有更好的解决办法吗?

从TableA DateTime1 >= '2020-10-10‘和DateTime1 <= '2020-10-12’中选择*,以及(从TableA选择count( A.Id )作为A内连接,在A.Id= B.Id上选择TableB as B,其中A.DateTime1 >= '2020-10-10‘和A.DateTime1 <= '2020-10-12’和B.Status = 1) >0

现在,第一个select将只在该时间段中有与状态和时间段相匹配的行时选择)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64868745

复制
相关文章

相似问题

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