我是一名新的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这么新,我很难实现这个解决方案。有经验的人可以帮助我吗?
答案 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);
}
我希望您了解"如何使用编程语言与数据库进行交互。