zoukankan      html  css  js  c++  java
  • 学籍管理里关于新生老生的一个问题

    学籍管理里关于新生老生的一个问题:

    比如我有两张表:
    1. 学生个人信息表actif,记录的是学生的年龄、性别什么的。
    2. 学籍管理表inscription,学生第一次注册那他就是新生,这个表里有个字段ins_type专门用来记录这个情况,记录为0。同一个学生第二次来注册,那么他就是老生了,记录为1。
    道理挺简单的,如果是新的插入,只要在插入前,探测一下这个学生是否注册过就知道他是新生老生了。但问题是,inscription里已经有大堆的记录,如何使用sql语句一次性找出和修改之前的学籍注册情况?只要能够实现这个目的,使用辅助表,或者增加字段,或者使用几句SQL分开写什么的都可以。

    准确答案:

    create temporary table t1 as 
    select min(id) as pk
    from 学籍管理表
    group by student_id
    
    update 学籍管理表 set ins_type=0
    where id in (select pk from t1)
    
    update 学籍管理表 set ins_type=1
    where id not in (select pk from t1)

    参考答案:
    不要额外的ins_type列,一个查询解决:
    select (select coun(*) from inscription t1 where t1.学生编码 = t.学生编码) as 新老标识,t.* from actif

    在插入时候的可使用特殊语句:
    replace .... 在MYSQL官方免费手册中看一下它的例子和说明。
    insert into .. on duplicate ...

    这句很快,1秒完成:
    update inscription,actif set ins_naissance=act_datenaissance where act_id=ins_actif
    这句奇慢,19分钟完成:
    update inscription_pan,actif_pan set ins_naissance=act_datenaissance where (act_id=ins_actif) and (act_ecole=ins_ecole)

  • 相关阅读:
    JVM相关知识
    面试之mysql专题
    Java新特性
    数据结构操作与算法复杂度分析
    IO流
    浅谈Web安全
    面试题2
    需要知道的HTTP 知识
    How JavaScript Work
    webpack 学习笔记
  • 原文地址:https://www.cnblogs.com/findumars/p/3108829.html
Copyright © 2011-2022 走看看