常用的SQL语句总结

931 阅读

平时很多时候需要用到SQL,一些常见常用的SQL语句总结,后面可以拷贝使用。

一、使用表内其它的列组合来更新一个列

例如,有一个表,有一列是ID列,有一列是名称列,需要增加一列,内容是ID与名称的组合。 原来的表:

idname
1journal
2journal

新的表如下:

idnamenew_col
1journaljournal-1
2journaljournal-2

方法如下:先增加一列,然后更新这列

UPDATE table_name SET new_col = CONCAT(name, '-', id);

二、MySQL更新列为当前时间

update table_name set update_time=now(3) where id=1;

三、两个表连接后分组查询,展示每一组前N行

the greatest-n-per-group 问题

表 test1 如下

print_issnname
1234-1234journal1
8888-8888journal2

表 test2 如下:

volume_indexprint_issnvol_name
11234-1234j1_vol1
21234-1234j1_vol2
31234-1234j1_vol3
18888-8888j2_vol1
28888-8888j2_vol2
38888-8888j2_vol3
48888-8888j2_vol4

test2的print_issn来自于test1,展示test1的记录,以及每一个test1下关联的test2,每一个记录只展示test2的前N条,比如,前2个,如下结果:

print_issnnamevolume_indexvol_name
1234-1234journal11j1_vol1
1234-1234journal12j1_vol2
8888-8888journal21j2_vol1
8888-8888journal22j2_vol2
SELECT * FROM (SELECT a.* ,CASE WHEN @prev = print_issn THEN @i:=@i+1 ELSE @i:=1 END i ,@prev:=print_issn prev FROM (SELECT c.print_issn, c.name, n.volume_name FROM test1 c JOIN test2 n ON n.print_issn = c.print_issn ORDER BY print_issn,volume_index DESC) a JOIN (SELECT @prev:=NULL, @i:=   0) vars ) n WHERE  n.i <= 2 limit 0,10;

四、两个表关联,用一个表的一个字段更新另一个表的一个字段

UPDATE    datalearner.table1 a,
          datalearner.table2 b
    SET       b.print_issn = a.print_issn
   WHERE     a.journal_full_name = b.journal_full_name;

DataLearner 官方微信

欢迎关注 DataLearner 官方微信,获得最新 AI 技术推送

DataLearner 官方微信二维码