作业帮 > 综合 > 作业

select Insert into和Insert into select的区别

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/22 23:49:18
select Insert into和Insert into select的区别
我现在是想把A表中的数据复制到B表中,但需要先看看B表中是否存在上条数据,不存在才插入,应该如何写呢?
假如A表和B表中都 有a,b两个字段
OleDbDataReader dr1 = hongli.DBExecuteReader("select * from [keywords] where ykeywords='" + getwords[i].Split('=')[0] + "' and nkeywords='" + getwords[i].Split('=')[1] + "'");
if dr1.Read())
{
hongli.DBExecuteNonQuery("Insert into [keywords](ykeywords,nkeywords)values('" + getwords[i].Split('=')[0] + "','" + getwords[i].Split('=')[1] + "')");
}
如何把这整合成一句SQL,现在是执行两次,整合后是不是会效率高一点
1.INSERT INTO SELECT语句
语句形式为:Insert into Table2(field1,field2,...) select value1,value2,...from Table1
要求目标表Table2必须存在,由于目标表Table2已经存在,所以我们除了插入源表Table1的字段外,还可以插入常量
2.SELECT INTO FROM语句
语句形式为:SELECT vale1,value2 into Table2 from Table1
要求目标表Table2不存在,因为在插入时会自动创建表Table2,并将Table1中指定字段数据复制到Table2中
若使要实现你所要的功能,为什么不使用exists呢?
再问: Insert into [keywords](ykeywords,nkeywords)values('" + getwords[i].Split('=')[0] + "','" + getwords[i].Split('=')[1] + "') 我现在这样写是没有经过判断是否存在的,如果要加上那个判断是否存在 应该如何写呢?
再答: INSERT INTO 表1 (a,b) select a,b from 表2 where not exists(select * from 表1 where 表1.a=表2.a and 表1.b=表2.b) 测试了下,可以
再问: for (int i = 0; i < getwords.Count; i++) { hongli.DBExecuteNonQuery("Insert into [keywords](ykeywords,nkeywords)values('" + getwords[i].Split('=')[0] + "','" + getwords[i].Split('=')[1] + "')"); }
再答: 这段程序只是实现逐条插入,和 你之前问的问题有什么关系吗?如果你还是希望实现你之前所问的问题,只需要按照我上面所给的sql语句执行就可以了
再问: 这个是逐条插入,但假如我的keywords表中已经存在这条数据了,我就不想插入这条数据了,所以希望加个判断
再答: 若只是针对keywords表 hongli.DBExecuteNonQuery("Insert into [keywords](ykeywords,nkeywords)values('" + getwords[i].Split('=')[0] + "','" + getwords[i].Split('=')[1] + "') where not exists (select * from keywords where ykeywords='" + getwords[i].Split('=')[0] + "' and nkeywords='" + getwords[i].Split('=')[1] + "')"); 你是要这个吗?
再答: hongli.DBExecuteNonQuery("Insert into [keywords](ykeywords,nkeywords)values('" + getwords[i].Split('=')[0] + "','" + getwords[i].Split('=')[1] + "') where not exists(select * from keywords where ykeywords='" + getwords[i].Split('=')[0] + "' and nkeywords='" + getwords[i].Split('=')[1] + "')"); 是这个吗?
再答: 我看这次会不会回答成功 hongli.DBExecuteNonQuery("Insert into [keywords](ykeywords,nkeywords)values('" + getwords[i].Split('=')[0] + "','" + getwords[i].Split('=')[1] + "') where not exists (select * from keywords where ykeywords='" + getwords[i].Split('=')[0] + "' and nkeywords='" + getwords[i].Split('=')[1] + "')");