关于表数据复制的问题

SUMI_SUMI 2017-11-21 02:44:05
请教大家一个问题:

我的数据中中有2个表,tableA,tableB
其中表tableA中有字段 A,B,C,D,E
tableB中有字段B,C,D
我想把tableA中的BCD字段插入到tableB的BCD中,
并且满足 如果tableA中BCD完全相同条目不重复插入到tableB,且tableA的B为null的不插入到tableB
如何写sql语句?
...全文
326 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
吉普赛的歌 2017-11-23
  • 打赏
  • 举报
回复
下面的 row_number 这一列是正确无误的了:
drop table if exists testTable1;
create table testTable1( id INT PRIMARY KEY,[name] NVARCHAR(20), parentId INT );
INSERT INTO testTable1(id,[name],parentId) VALUES(2,'xf1',0);
INSERT INTO testTable1(id,[name],parentId) VALUES(3,'xf2',0);
INSERT INTO testTable1(id,[name],parentId) VALUES(5,'xf3',2);
INSERT INTO testTable1(id,[name],parentId) VALUES(6,'xf4',3);
INSERT INTO testTable1(id,[name],parentId) VALUES(7,'xf5',4);
INSERT INTO testTable1(id,[name],parentId) VALUES(9,'xf6',5);

delete from testTable1 where id=7;

select 
  rowid
  ,(select count(*) from testTable1 b  where a.id >= b.id) as row_number
  ,* 
from testTable1 as a 
order by id;
/*
rowid	row_number	id	name	parentId
1	        1	    2	xf1	    0
2	        2	    3	xf2	    0
3	        3	    5	xf3	    2
4	        4	    6	xf4	    3
6	        5	    9	xf6	    5
*/
SUMI_SUMI 2017-11-22
  • 打赏
  • 举报
回复
引用 13 楼 yenange 的回复:
用 rowid 就是了。
感谢,但是rowid好像是曾经存在过的id 如果我之前删除或者操作过数据, 貌似update frmt set D=rowid 也不是1234567递增的 而是1235678这样也有缺失 rowid应该是真实行号而不是当前(查询结果)行号,所以如果数据是未经改动的才可以这么干......
吉普赛的歌 2017-11-22
  • 打赏
  • 举报
回复
create table if not exists testTable1( id INT PRIMARY KEY,[name] NVARCHAR(20), parentId INT );
INSERT INTO testTable1(id,[name],parentId) VALUES(2,'xf1',0);
INSERT INTO testTable1(id,[name],parentId) VALUES(3,'xf2',0);
INSERT INTO testTable1(id,[name],parentId) VALUES(5,'xf3',2);
INSERT INTO testTable1(id,[name],parentId) VALUES(6,'xf4',3);
INSERT INTO testTable1(id,[name],parentId) VALUES(7,'xf5',4);
INSERT INTO testTable1(id,[name],parentId) VALUES(9,'xf6',5);

select rowid as RowNumber ,* from testTable1 order by id




用 rowid 就是了。
SUMI_SUMI 2017-11-21
  • 打赏
  • 举报
回复
引用 11 楼 yenange 的回复:
你到底用的是 SQL Server 还是 Sqlite ? 还有用的是什么版本?
Sqlite 3
吉普赛的歌 2017-11-21
  • 打赏
  • 举报
回复
你到底用的是 SQL Server 还是 Sqlite ? 还有用的是什么版本?
SUMI_SUMI 2017-11-21
  • 打赏
  • 举报
回复
引用 9 楼 yenange 的回复:
不要在乎 id 是否在错误情况下自增, 这个东西在业务上本身就不重要,也不方便控制。 如果业务上确实需要有一个按“顺序”的代号,那你可以再加一个字段。
请问具体如何处理? 我确实需要在tableB里面有个字段内容是从1开始递增的,所以我才加了个字段D并且设为自增
吉普赛的歌 2017-11-21
  • 打赏
  • 举报
回复
不要在乎 id 是否在错误情况下自增, 这个东西在业务上本身就不重要,也不方便控制。 如果业务上确实需要有一个按“顺序”的代号,那你可以再加一个字段。
SUMI_SUMI 2017-11-21
  • 打赏
  • 举报
回复
引用 7 楼 SUMI_SUMI 的回复:
b is not null改成length(b)>0 条件就OK了 但是还是会插入重复数据 这个怎么解决?
我用代码如下 insert OR IGNORE into tableA (a,b,c ) SELECT a, b,c FROM tableB WHERE length(c) > 0 在表里面进行了约束实现了不插入重复数据,但是因为我的tableB中有一个字段D(是int的主键自增) 我摄像的是插入从1开始一次递增 结果我发现插入后的实际数据的D不是从1开始的 因该是因为插入的时候虽然IGNORE起了作用D还是自增了 这个如何解决呢?
SUMI_SUMI 2017-11-21
  • 打赏
  • 举报
回复
b is not null改成length(b)>0 条件就OK了 但是还是会插入重复数据 这个怎么解决?
SUMI_SUMI 2017-11-21
  • 打赏
  • 举报
回复
感谢楼上各位
引用 5 楼 leo_lesley 的回复:
[quote=引用 3 楼 SUMI_SUMI 的回复:] [quote=引用 1 楼 leo_lesley 的回复:] insert tableB select distinct B,C,D from tableA where b is not null
额 我用的SQLiteExpertPro操作的sqlite 结果报错:near "tableB":syntax error[/quote] --加上into,试试看 insert into tableB(B,C,D) select distinct B,C,D from tableA where b is not null [/quote] 是的 这样可行 但是tableB中插入的数据,重复和和为null的都进去了
leo_lesley 2017-11-21
  • 打赏
  • 举报
回复
引用 3 楼 SUMI_SUMI 的回复:
[quote=引用 1 楼 leo_lesley 的回复:] insert tableB select distinct B,C,D from tableA where b is not null
额 我用的SQLiteExpertPro操作的sqlite 结果报错:near "tableB":syntax error[/quote] --加上into,试试看 insert into tableB(B,C,D) select distinct B,C,D from tableA where b is not null
听雨停了 2017-11-21
  • 打赏
  • 举报
回复

use Tempdb
go
--> --> 听雨停了-->测试数据
 
if not object_id(N'Tempdb..#tabA') is null
	drop table #tabA
Go
Create table #tabA([A] int,[B] int,[C] int,[D] int,[E] int)
Insert #tabA
select 1,2,3,4,5 union all
select 8,2,3,4,5 union all
select 1,1,1,1,1 union all
select 1,null,1,2,3

if not object_id(N'Tempdb..#tabB') is null
	drop table #tabB
Go
Create table #tabB([B] int,[C] int,[D] int)
Insert #tabB
select 1,1,1
--测试数据结束


--1.除去BCD重复且B不等于null的数据,插入到#tabC中
SELECT DISTINCT B,C,D 
INTO #tabC
FROM #tabA
WHERE ISNULL(B,'')<>''

--2.使用merge函数进行数据同步
MERGE INTO #tabB AS T
USING #tabC AS S
ON t.B=s.B AND t.C=s.C AND t.D=s.D
WHEN NOT matched	--目标表(#tabB)中没有时,源表(#tabC)数据插入
THEN INSERT values(s.B,s.C,s.D);

SELECT * FROM #tabB

B           C           D
----------- ----------- -----------
1           1           1
2           3           4
SUMI_SUMI 2017-11-21
  • 打赏
  • 举报
回复
引用 1 楼 leo_lesley 的回复:
insert tableB select distinct B,C,D from tableA where b is not null
额 我用的SQLiteExpertPro操作的sqlite 结果报错:near "tableB":syntax error
二月十六 2017-11-21
  • 打赏
  • 举报
回复
--测试数据
if not object_id(N'Tempdb..#tableA') is null
drop table #tableA
Go
Create table #tableA([A] int,[B] int,[C] int,[D] int,[E] int)
Insert #tableA
select 1,1,1,1,1 union ALL
select 1,1,1,1,1 union all
select 2,NULL,2,2,2 union all
select 3,3,3,3,3
GO
if not object_id(N'Tempdb..#tableB') is null
drop table #tableB
Go
Create table #tableB([B] int,[C] int,[D] int)
Insert #tableB
select 1,2,3
Go
--测试数据结束
INSERT INTO #tableB
( B, C, D )
SELECT DISTINCT
B ,
C ,
D
FROM #tableA
WHERE B IS NOT NULL

SELECT * FROM #tableB


leo_lesley 2017-11-21
  • 打赏
  • 举报
回复
insert tableB select distinct B,C,D from tableA where b is not null
程序 = 数据结构 + 算法  程序是为了解决实际问题而存在的。然而为了解决问题,必定会使用到某些数据结构以及设计一个解决这种数据结构的算法。如果说各种编程语言是程序员的招式,那么数据结构和算法就相当于程序员的内功。编程实战算法,不是念PPT,我们讲的就是实战与代码实现与企业应用。程序 = 数据结构 + 算法                ——图灵奖得主,计算机科学家N.Wirth(沃斯)作为程序员,我们做机器学习也好,做python开发也好,java开发也好。有一种对所有程序员无一例外的刚需 —— 算法与数据结构日常增删改查 + 粘贴复制 + 搜索引擎可以实现很多东西。同样,这样也是没有任何竞争力的。我们只可以粘贴复制相似度极高的功能,稍复杂的逻辑没有任何办法。语言有很多,开发框架更是日新月异3个月不学就落后我们可以学习很多语言,很多框架,但招聘不会考你用5种语言10种框架实现同一个功能。真正让程序员有区分度,企业招聘万年不变的重点 —— 算法与数据结构。算法代程序员水平的珠穆朗玛。 本视频由微软全球最有价值专家尹成录制,拒绝念PPT,代码实战数据结构与算法导论。除了传统数据结构算法,加入高并发线程安全数据结构,分布式负载均衡算法,分布式哈希,分布式排序等等现代算法。  算法,晦涩难懂,却又是IT领域受重视的素养之一。可以说,算法能力往往决定了一个程序员能够走多远。因此,BAT/FLAG等国内外各大名企非常喜欢在面试环节考核求职者的算法编程,这也成为了无数准程序员们过不去的一道“坎”。如何入门并成为一名出色的算法工程师?但无论半路出家还是科班出身,除学生时代搞算法竞赛的同学外真正用心学习过算法与数据结构太少太少。对于后期想要学习算法与数据结构却不得不面对以下问题:没有自己的知识框架,无法关联知识点,学习效率低有疑问而无人解答,有问题无法理解全靠猜测,一个问题卡好几天市面上资料题解质量参差不齐,正确性未可知Google算法-工程师尹成大哥学习算法。

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧