我试图找出如何在我的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()函数的情况下执行?
提前致谢。
答案 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