Mysql SQL:使用唯一值复制行并更改列值

Mysql SQL:使用唯一值复制行并更改列值,mysql,Mysql,我是一个新的SQL用户,我需要一些帮助 我有一个包含多个数据列的表。兴趣的两列分别称为“课程id”和“年份” 我试图做的是将所有具有唯一“course_id”的行复制到具有相同数据但具有不同年份的新行。我发现很难准确地解释我想要什么,所以这里有一个例子(按课程编号排序): 如果我想更新此表以添加“2017年”,我会得到: id year course_id 1 2014 1 2 2015 1 7

我是一个新的SQL用户,我需要一些帮助

我有一个包含多个数据列的表。兴趣的两列分别称为“课程id”和“年份”

我试图做的是将所有具有唯一“course_id”的行复制到具有相同数据但具有不同年份的新行。我发现很难准确地解释我想要什么,所以这里有一个例子(按课程编号排序):

如果我想更新此表以添加“2017年”,我会得到:

id        year          course_id
1         2014          1
2         2015          1
7         2017          1
3         2014          2
4         2015          2
5         2016          2
8         2017          2
6         2014          3
9         2017          3
具有相同课程ID的所有行都具有相同的数据,因此ID 7将具有与ID 1和ID 2相同的数据,但列“year”不同

由于对SQL如此陌生,我很难找到解决方案。有经验的人能帮我吗?

在SQL Server中(年的方括号中):

您可以从表中插入
不同的
课程id
s,以及
年份的值,如下所示:

insert into tbl ([year],course_id)
select distinct 
    2017
  , course_id
from tbl
在MySQL中:

insert into tbl (`year`,course_id)
select distinct 
    2017
  , course_id
from tbl

我还建议使用
notexists
,这样查询就可以被重新运行多次,并且永远不会抛出PK冲突异常。也许你的情况不需要

INSERT INTO tbl (`year`, course_id)
SELECT DISTINCT 2017, course_id
FROM tbl AS t1
WHERE NOT EXISTS (   SELECT 1
                     FROM tbl AS t2
                     WHERE t2.course_id = t1.course_id
                     AND t2.`year` = 2017);
此外,为了获得最佳性能,您可以添加索引,以便引擎可以高效地查找记录

ALTER TABLE `tbl ` ADD INDEX `ix_tbl_year_course_id` (`year`, `course_id`)

这不是一个有效的解决方案,但会奏效。用任何编程语言编写查询

    Connection con = DriverManager.getConnection(url, userName, password);
    Statement s1 = con.createStatement();
    ResultSet rs = s1.executeQuery(select distinct course_id from tbl);
    while(rs.next()){
    String item = rs.getString("course_id");
    String query="insert into tbl(year,course_id) values('2017',"+item+")";
    ResultSet rs1 = s1.executeQuery(query);
    }

我希望您了解“如何使用编程语言与数据库交互。

我们可以假设您的列id是自动增量id,因此我们不需要考虑如何插入正确的id吗?是的,列id是自动增量id。请修改标记、MySQL(Oracle)和SQL Server(Mircosoft)是两种不同的东西。哇!说明了我知道多少:)这并不是我所需要的,因为我有超过两列的数据,但这个解决方案+更多的研究产生了一个有效的解决方案:)谢谢!@L.Hed很乐意帮助!
    Connection con = DriverManager.getConnection(url, userName, password);
    Statement s1 = con.createStatement();
    ResultSet rs = s1.executeQuery(select distinct course_id from tbl);
    while(rs.next()){
    String item = rs.getString("course_id");
    String query="insert into tbl(year,course_id) values('2017',"+item+")";
    ResultSet rs1 = s1.executeQuery(query);
    }