Mysql 当另一个select匹配时,如何编写查询以选择数据

Mysql 当另一个select匹配时,如何编写查询以选择数据,mysql,Mysql,表 表B Id, DateTime1 1, 2020-10-10 2, 2020-10-11 3, 2020-10-12 如果我想选择TableA中的所有行,其中DateTime1在2020-10-10到2020-10-12之间,如果TableA中的任何一行在TableB中的状态为1或2,我如何编写此查询 2020-10-10至2020-10-12的预期结果以及任何一行的状态为1或2将如下所示: Id, Status 1, 1 1, 2 3, 1 如果我将状态更改为2020-10-10至20

表B

Id, DateTime1
1, 2020-10-10
2, 2020-10-11
3, 2020-10-12
如果我想选择TableA中的所有行,其中DateTime1在2020-10-10到2020-10-12之间,如果TableA中的任何一行在TableB中的状态为1或2,我如何编写此查询

2020-10-10至2020-10-12的预期结果以及任何一行的状态为1或2将如下所示:

Id, Status
1, 1
1, 2
3, 1
如果我将状态更改为2020-10-10至2020-10-12,且任何一行为状态3,则不会选择任何行,因为此期间没有任何一行具有状态3

如果我写

Id, DateTime1
1, 2020-10-10
2, 2020-10-11
3, 2020-10-12
然后只选择Id 1和3,但我想要1、2和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

错误失败:“where子句”中的未知列“totals”

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

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

这将选择TableA中状态介于1和2之间的所有行,请尝试此查询。根据给定的数据,我假设TableA和TableB与id列有外键关系


可能是我的问题无法正确解释。我找到了解决办法,但还有更好的办法吗

从表A中选择*,其中DateTime1>='2020-10-10'和DateTime1='2020-10-10'以及A.DateTime1 0

第一次选择现在仅在该时间段上有与状态和时间段匹配的行时才进行选择。

请尝试以下操作

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)


以创建表格+插入方式提供示例数据。通过外键指定表之间的链接。扩展示例数据可能。。。并显示所提供数据的所需输出。请仔细研究:。出现错误失败:“where子句”中的未知列“totals”当然-totals是子查询别名,而不是列别名。
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)
select * 
from TableA as A , TableB as B 
where  A.Id = B.Id 
AND (A.DateTime1 >= '2020-10-10' AND A.DateTime1 <= '2020-10-12' )
AND (B.Status = 1 or B.Status = 2)
select * 
from TableA as A , TableB as B 
where  A.Id = B.Id 
AND (A.DateTime1 >= '2020-10-10' AND A.DateTime1 <= '2020-10-12' )
AND CASE WHEN B.Status IN (1,2) THEN 1 ELSE 0 END = 1