Sqlite将一张表的一个字段和另外一个表的字段关联起来,并更新另外一张表的数据

a_123gogo 2019-08-07 12:18:54
比如,表一有A,B,C,D字段,表二和表一字段一样。
如果表一.A = 表二.A
则令表一的该条数据等于表二相应的存在的数据
否则将表二该条数据插入到表一
注:表二有的数据就更新到表一,没有的就保留原有的。
sqlite没有存储过程
两个表字段很多100多个。
...全文
1078 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
a_123gogo 2019-08-07
  • 打赏
  • 举报
回复
引用 4 楼 a_123gogo 的回复:
[quote=引用 3 楼 二月十六 的回复:] [quote=引用 2 楼 a_123gogo 的回复:] [quote=引用 1 楼 二月十六 的回复:]
--测试数据
if not object_id(N'Tempdb..#T1') is null
	drop table #T1
Go
Create table #T1([A] int,[B] int,[C] int,[D] int)
Insert #T1
select 1,1,1,1 union all
select 2,2,2,2
GO
if not object_id(N'Tempdb..#T2') is null
	drop table #T2
Go
Create table #T2([A] int,[B] int,[C] int,[D] int)
Insert #T2
select 1,10,10,10 union all
select 3,8,8,8
Go
--测试数据结束
--更新
UPDATE #T1 SET B=#T2.B,C=#T2.C,D=#T2.D FROM #T2 WHERE #T1.A=#T2.A
--插入
INSERT INTO #T1
SELECT * FROM #T2 WHERE #T2.A NOT IN(SELECT A FROM #T1)
--查看测试结果
SELECT * FROM #T1
不知道这个怎么回复: 请问楼上大佬,这样直接用表二更新了表一,如果表二中的某些字段没有,而表一里面有。这样将表一的那个字段更新为空了?请问能不能对表二每个字段进行判断是否为空,为空则不更新表一的该字段[/quote] 是A字段有值,然后B字段没有?加一个判断就行,如果表二B有值则用表二的B,如果没有用表一的B。这个判断SQLlite怎么写不太清楚,sqlserver用isnull就可以[/quote] ok大概懂了,谢谢大佬[/quote] 这个sqlite使用update的时候不能用From 然后看到有人说可以用insert or replace 但是会替代表中的整行,如果表二是null,表一有值也会把表一的值更新为null了,看来是不行了
a_123gogo 2019-08-07
  • 打赏
  • 举报
回复
引用 3 楼 二月十六 的回复:
[quote=引用 2 楼 a_123gogo 的回复:] [quote=引用 1 楼 二月十六 的回复:]
--测试数据
if not object_id(N'Tempdb..#T1') is null
	drop table #T1
Go
Create table #T1([A] int,[B] int,[C] int,[D] int)
Insert #T1
select 1,1,1,1 union all
select 2,2,2,2
GO
if not object_id(N'Tempdb..#T2') is null
	drop table #T2
Go
Create table #T2([A] int,[B] int,[C] int,[D] int)
Insert #T2
select 1,10,10,10 union all
select 3,8,8,8
Go
--测试数据结束
--更新
UPDATE #T1 SET B=#T2.B,C=#T2.C,D=#T2.D FROM #T2 WHERE #T1.A=#T2.A
--插入
INSERT INTO #T1
SELECT * FROM #T2 WHERE #T2.A NOT IN(SELECT A FROM #T1)
--查看测试结果
SELECT * FROM #T1
不知道这个怎么回复: 请问楼上大佬,这样直接用表二更新了表一,如果表二中的某些字段没有,而表一里面有。这样将表一的那个字段更新为空了?请问能不能对表二每个字段进行判断是否为空,为空则不更新表一的该字段[/quote] 是A字段有值,然后B字段没有?加一个判断就行,如果表二B有值则用表二的B,如果没有用表一的B。这个判断SQLlite怎么写不太清楚,sqlserver用isnull就可以[/quote] ok大概懂了,谢谢大佬
二月十六 2019-08-07
  • 打赏
  • 举报
回复
引用 2 楼 a_123gogo 的回复:
[quote=引用 1 楼 二月十六 的回复:]
--测试数据
if not object_id(N'Tempdb..#T1') is null
	drop table #T1
Go
Create table #T1([A] int,[B] int,[C] int,[D] int)
Insert #T1
select 1,1,1,1 union all
select 2,2,2,2
GO
if not object_id(N'Tempdb..#T2') is null
	drop table #T2
Go
Create table #T2([A] int,[B] int,[C] int,[D] int)
Insert #T2
select 1,10,10,10 union all
select 3,8,8,8
Go
--测试数据结束
--更新
UPDATE #T1 SET B=#T2.B,C=#T2.C,D=#T2.D FROM #T2 WHERE #T1.A=#T2.A
--插入
INSERT INTO #T1
SELECT * FROM #T2 WHERE #T2.A NOT IN(SELECT A FROM #T1)
--查看测试结果
SELECT * FROM #T1
不知道这个怎么回复: 请问楼上大佬,这样直接用表二更新了表一,如果表二中的某些字段没有,而表一里面有。这样将表一的那个字段更新为空了?请问能不能对表二每个字段进行判断是否为空,为空则不更新表一的该字段[/quote] 是A字段有值,然后B字段没有?加一个判断就行,如果表二B有值则用表二的B,如果没有用表一的B。这个判断SQLlite怎么写不太清楚,sqlserver用isnull就可以
a_123gogo 2019-08-07
  • 打赏
  • 举报
回复
引用 1 楼 二月十六 的回复:
--测试数据
if not object_id(N'Tempdb..#T1') is null
	drop table #T1
Go
Create table #T1([A] int,[B] int,[C] int,[D] int)
Insert #T1
select 1,1,1,1 union all
select 2,2,2,2
GO
if not object_id(N'Tempdb..#T2') is null
	drop table #T2
Go
Create table #T2([A] int,[B] int,[C] int,[D] int)
Insert #T2
select 1,10,10,10 union all
select 3,8,8,8
Go
--测试数据结束
--更新
UPDATE #T1 SET B=#T2.B,C=#T2.C,D=#T2.D FROM #T2 WHERE #T1.A=#T2.A
--插入
INSERT INTO #T1
SELECT * FROM #T2 WHERE #T2.A NOT IN(SELECT A FROM #T1)
--查看测试结果
SELECT * FROM #T1
不知道这个怎么回复: 请问楼上大佬,这样直接用表二更新了表一,如果表二中的某些字段没有,而表一里面有。这样将表一的那个字段更新为空了?请问能不能对表二每个字段进行判断是否为空,为空则不更新表一的该字段
二月十六 2019-08-07
  • 打赏
  • 举报
回复
--测试数据
if not object_id(N'Tempdb..#T1') is null
drop table #T1
Go
Create table #T1([A] int,[B] int,[C] int,[D] int)
Insert #T1
select 1,1,1,1 union all
select 2,2,2,2
GO
if not object_id(N'Tempdb..#T2') is null
drop table #T2
Go
Create table #T2([A] int,[B] int,[C] int,[D] int)
Insert #T2
select 1,10,10,10 union all
select 3,8,8,8
Go
--测试数据结束
--更新
UPDATE #T1 SET B=#T2.B,C=#T2.C,D=#T2.D FROM #T2 WHERE #T1.A=#T2.A
--插入
INSERT INTO #T1
SELECT * FROM #T2 WHERE #T2.A NOT IN(SELECT A FROM #T1)
--查看测试结果
SELECT * FROM #T1


22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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