TableA
Id, DateTime1
1, 2020-10-10
2, 2020-10-11
3, 2020-10-12TableB
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)的预期结果如下:
Id, DateTime1
1, 2020-10-10
2, 2020-10-11
3, 2020-10-12如果我将状态更改为(2020-10-10到2020-10-10-12,而任何一行为状态3),则不会选择任何行,因为在此期间没有任何行具有状态3。
如果我写
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。
如果我写:
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'
发布于 2020-11-17 04:47:48
您可以使用子查询。例如:
SELECT * FROM TableA WHERE Id IN (SELECT Id from TableB WHERE Status>=1 AND Status<=2)这将选择状态介于1和2之间的TableA中的所有行。
发布于 2020-11-17 04:57:52
尝试这个查询。根据给定的数据,我假设TableA和TableB与id列有外键关系。
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)发布于 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将只在该时间段中有与状态和时间段相匹配的行时选择)。
https://stackoverflow.com/questions/64868745
复制相似问题