常用的SQL语句总结
平时很多时候需要用到SQL,一些常见常用的SQL语句总结,后面可以拷贝使用。
一、使用表内其它的列组合来更新一个列
例如,有一个表,有一列是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技术推送
