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

时间:2017-05-31 12:32:34

标签: mysql

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

我有一个包含多个数据列的表。感兴趣的两列被称为" course_id"和"年"。

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

id        year          course_id
1         2014          1
2         2015          1
3         2014          2
4         2015          2
5         2016          2
6         2014          3

如果我想更新此表以添加年份" 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和2相同的数据,但使用列" year"不同。

对SQL这么新,我很难实现这个解决方案。有经验的人可以帮助我吗?

3 个答案:

答案 0 :(得分:1)

在SQL Server(year周围的方括号)中:

您可以insert表格中的distinct course_id以及year的值,如下所示:

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

答案 1 :(得分:0)

我还建议使用NOT EXISTS,如果是这样,查询可以重复多次,并且永远不会抛出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`)

答案 2 :(得分:0)

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

    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);
    }

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