MySQL子查询在WHERE子句中返回多行

时间:2017-02-03 05:25:35

标签: mysql

我试图找出如何在我的where子句中使用多行来执行我的查询而不使用in()和any(),因为我当前的数据库不支持这些函数。目前我有这个查询

select crack_id 
from gndmeas 
where timestamp = (select distinct timestamp 
                   from gndmeas 
                   where site_id='agb' 
                   order by timestamp desc limit 10
                  );

子查询由

组成

+---------------------+ | timestamp | +---------------------+ | 2017-01-13 08:15:00 | | 2017-01-10 07:00:00 | | 2017-01-06 08:30:00 | | 2017-01-03 10:00:00 | | 2016-12-27 09:25:00 | | 2016-12-20 07:30:00 | | 2016-12-13 07:35:00 | | 2016-12-09 08:10:00 | | 2016-12-06 07:40:00 | | 2016-12-02 07:00:00 | +---------------------+

我想用where子句的那些数据做一个select查询。是否可以在不使用mysql的any()和in()函数的情况下执行?

提前致谢。

4 个答案:

答案 0 :(得分:1)

你可以使用加入。

select a.crack_id from gndmeas a join (select distinct timestamp from 
    gndmeas where site_id='agb' order by timestamp desc limit 10) b 
    on a.timestamp=b.timestamp

答案 1 :(得分:1)

使用join

尝试此操作
select a.crack_id 
from gndmeas a 
inner join 
(select distinct timestamp 
                   from gndmeas 
                   where site_id='agb' 
                   order by timestamp desc limit 10
                  )as b
on a.timestamp = b.timestamp

答案 2 :(得分:0)

至少有两种选择。

使用临时表并首先将时间戳存储在临时表中。 使用临时表进行内部联接以过滤主表中的记录。

如果mysql允许(我不确定),请使用嵌套表作为内连接的一部分。

答案 3 :(得分:0)

使用左外连接到表:

select crack_id
from gndmeas G
left outer join gndmeas G1 on G.timestamp=G1.timestamp
where G.site_id='agb' 
order by G.timestamp desc limit 10

由group by子句区分crack_id:

select crack_id
from gndmeas G
left outer join gndmeas G1 on G.timestamp=G1.timestamp
where G.site_id='agb' 
group by G.crack_id
order by G.timestamp desc limit 10