常用的SQL语句总结

标签:#SQL##编程# 时间:2022/04/15 23:15:49 作者:小木

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

[TOC]

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

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

id name
1 journal
2 journal

新的表如下:

id name new_col
1 journal journal-1
2 journal journal-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_issn name
1234-1234 journal1
8888-8888 journal2

表 test2 如下:

volume_index print_issn vol_name
1 1234-1234 j1_vol1
2 1234-1234 j1_vol2
3 1234-1234 j1_vol3
1 8888-8888 j2_vol1
2 8888-8888 j2_vol2
3 8888-8888 j2_vol3
4 8888-8888 j2_vol4

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

print_issn name volume_index vol_name
1234-1234 journal1 1 j1_vol1
1234-1234 journal1 2 j1_vol2
8888-8888 journal2 1 j2_vol1
8888-8888 journal2 2 j2_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官方微信,接受最新的AI技术推送