关闭

数据库查询及随机更新的那些事情

标签: 数据库mysql
343人阅读 评论(0) 收藏 举报
分类:

最近几天实验室一直需要我来造数据,在开始的过程中遇到了些问题,但是最终都还是顺利的解决了,感觉挺容易的,下面说下我在这个过程中遇到的问题及方法。

1、每条船有一个ID即MMSI,但是每一条船在一个月内的数据有多条,数据库中2014.11月有4亿条数据,几十万艘船,现需要随机抽取1000多条船在某一经纬度范围内的数据,由于是随机的,所以用mysql里的Limited可以作为随机限定,语句如下:

SELECT * FROM table WHERE MMSI IN(SELECT MMSI FROM L0_Clean_AIS_Dynamic_Temp WHERE Latitude>=-12000000&&Latitude<=12000000&&Record_Datetime>1417363200&&Record_Datetime<1420041600)LIMIT 3365482

当然这是我之前做过测试的,知道大约300万数据里有1000多条船,其实这句话稍微合理的做法应该和下面第2条语句类似。


2、现在需要从这选择出来的1000条船中,再选择出100多条船的数据,querylimited即为1000多条船的表,当然这个语句和以上的类似的,但是写法有变,得到了126船:

SELECT  *  FROM querylimited  WHERE MMSI  NOT IN (SELECT MMSI FROM (SELECT  DISTINCT MMSI FROM querylimited  LIMIT 126)as t)


由于在where 限定语句后面不能直接使用LIMIT,所以需要在后面加上 as it 即将中间的查询结果,单独作为一个表t


3、

SELECT  *  FROM query126  WHERE MMSI  NOT IN (SELECT MMSI FROM (SELECT  DISTINCT MMSI FROM query126  LIMIT 38)as t)

4、

SELECT  *  FROM query126  WHERE MMSI   IN (SELECT MMSI FROM (SELECT  DISTINCT MMSI FROM query126  LIMIT 38)as t)

5、

UPDATE query88 SET latitude= latitude+RAND()*120000 AND lontitude=lontitude+RAND()*120000

这句话,写错了,用and,并不能直接更新想要的数据库,而是将纬度那一列值赋为0了,如果想同时更新两列,需要用逗号,而不是and,这句话应改为:

UPDATE query88 SET latitude= latitude+RAND()*120000 ,lontitude=lontitude+RAND()*120000



   
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:14192次
    • 积分:208
    • 等级:
    • 排名:千里之外
    • 原创:3篇
    • 转载:3篇
    • 译文:0篇
    • 评论:13条
    最新评论