0

テーブルを含むデータベースがあります。

create table student (
    stu_code integer,
    stu_name varchar(32),
    primary key (stu_code)
)
create table teacher (
    tea_code integer not null,
    tea_name varchar(25),
    primary key (tea_code)
)
create table course (
    cor_code integer not null,
    cor_name varchar(32),
    salary float(32),
    unit integer,
    primary key (cor_code)
)
create table term (
    stu_code integer,
    cor_code integer,
    tea_code integer,
    grade decimal(25),
    year integer,
)

3 つのテーブルを手動で入力しました。

用語テーブルは Javascript コードによって生成されました。

<html>
<body>
<div id="rnd"></div>
<script type="text/javascript">
    function rnd(a,b){
        return Math.floor(Math.random()*(b-a+1))+a;
    }
    for (var i=0;i<600;i++) {
        var stu = rnd(41,49),
        cor     = rnd(10,26),
        tea     = rnd(81,90),
        year    = rnd(1391,1392),
        grade   = rnd(8,20);
        (year==1392)?grade = null:true;
        document.writeln(
            "insert into term (stu_code,cor_code,tea_code,grade,year) values "
            +"(884221"              +stu+","
            +"180"                  +cor+","
            +"15120"                +tea+","
            +grade                  +"," 
            +year
            +");"
            +"<br>"
        );
    }
</script>
</body>
</html>

私の問題は、用語テーブルに追加の行があることです。

追加の行を統合/削除するにはどうすればよいですか?

ランダムな行を追加せずにテーブルを埋める方法はありますか?

/* アップデート : */

例えば ​​:

insert into term (s,c,t,g) values (45,16,88,16,91);
insert into term (s,c,t,g) values (45,16,86,10,91);
insert into term (s,c,t,g) values (45,16,87,8,91);
insert into term (s,c,t,g) values (41,15,85,20,91);
insert into term (s,c,t,g) values (41,15,88,17,91);

今私は表示したい:

insert into term (s,c,t,g) values (45,16,88,16,91);
insert into term (s,c,t,g) values (41,15,85,20,91);
or 

insert into term (s,c,t,g) values (45,16,88,16,91);
insert into term (s,c,t,g) values (41,15,88,17,91);
or

insert into term (s,c,t,g) values (45,16,86,10,91);
insert into term (s,c,t,g) values (41,15,85,20,91);
or 

insert into term (s,c,t,g) values (45,16,86,10,91);
insert into term (s,c,t,g) values (41,15,88,17,91);
or

insert into term (s,c,t,g) values (45,16,87,8,91);
insert into term (s,c,t,g) values (41,15,85,20,91);
or 

insert into term (s,c,t,g) values (45,16,87,8,91);
insert into term (s,c,t,g) values (41,15,88,17,91);

/*更新終了*/

/* 再度更新 */

Sql Server でコードを記述できましたが、このコードが Mysql で機能しないのはなぜですか? Mysql でこのコードに相当するものは何ですか?

delete  from  term
where  stu_code in(
select  stu_code
from  term
group  by  stu_code,cod_code,year
having  COUNT(stu_code)>=2

/* 最後の更新を終了します */

これを解決するのを手伝ってください!

ありがとう:x

4

2 に答える 2

1

各学生は複数のコースに登録でき、各学生はコースの 1 つのクラスのみに登録する必要があると仮定します。

学生 [41,49] とコース [10,26] しかないので、最大で 9 * 17 = 153 の組み合わせがあります。

私はこのようにします:

<html>
<body>
<div id="rnd"></div>
<script type="text/javascript">
    function rnd(a,b){
        return Math.floor(Math.random()*(b-a+1))+a;
    }
    for (var stu = 41; stu <= 49; stu++) {
        for (var cor = 10; cor <= 26; cor++) {
            tea   = rnd(81,90);
            year  = rnd(1391,1392);
            grade = rnd(8,20);
            (year==1392)?grade = null:true;
            document.writeln(
                "insert into term (stu_code,cor_code,tea_code,grade,year) values "
                +"(884221"              +stu+","
                +"180"                  +cor+","
                +"15120"                +tea+","
                +grade                  +"," 
                +year
                +");"
                +"<br>"
            );
        }
    }
</script>
</body>
</html>

更新された部分について

の最小値でレコードを保持するとします。year

DELETE a FROM 
    term a JOIN term b 
    ON (a.stu_code = b.stu_code AND a.cod_code = b.cod_code AND a.year > b.year)

したがって、このクエリが行うことは、すべての重複行を見つけて削除yearし、左側に大きな行を配置することです。

于 2013-01-29T12:26:31.480 に答える
0
delete  from  term
where  stu_code in(
select  stu_code
from  term
group  by  stu_code,cod_code,year
having  COUNT(stu_code)>=2

そのクエリの問題は、stu_code >= 2 の場合、すべての stu_codes が削除され、コピーが 1 つもないことだと思います。複数のコピーがある場合は、1 つのコピーを保持したいと考えています。

于 2013-01-29T12:55:25.290 に答える