SQL 服务器 - 从结果 A 中删除结果 B,插入原始 table
SQL Server - Remove results B from results A, insert to original table
Table结构
- RowId - 唯一标识符,默认值:newid()
- 模块名称 - nchar 25
- 类型 - int
- Id - 整数
- ParentId - int
- LanguageId - 整数
- 文本 - nvarchar 1024
- X - 整数
- Y - 整数
- 宽度 - 整数
- 身高 - 整数
- 待定 - smallint,默认值:0
- 备注 - nvarchar 250
我需要什么?
- 取
LanguageId = 1051
的所有记录,我们称这个集合为A
- 取
LanguageId != 1051
的所有记录,我们称这个集合为B
- 从集合 B 中移除,其中 all 这些条件适用:
B.ModuleName = A.ModuleName
B.Type = A.Type
B.Id = A.Id
B.ParentId = A.ParentId
- 根据
ModuleName
、Type
、Id
和 ParentId
删除集合 B 中的重复项(如果都是一样,只留下一条记录)
- 集合B,全部改成
LanguageId = 1051
- 插入集合B到原来的
Translation
table
我可以想象这个过程,但我不知道如何在SQL中实现。
非常感谢任何帮助。
insert into transision
select 1051 as LanguageId ,your columns.......
from B
left join A
on B.ModuleName != A.ModuleName and
B.Type != A.Type and
B.Id != A.Id and
B.ParentId != A.ParentId
where B.LanguageId !=1051
从满足所有这些条件的集合 B 中删除:
- B.ModuleName = A.ModuleName
- B.Type = A.Type
- B.Id = A.Id
- B.ParentId = A.ParentId
。等于这个
SELECT *
FROM Translation B
WHERE NOT EXISTS ( SELECT *
FROM Translation A
WHERE
A.LanguageId = 1051
and B.ModuleName = A.ModuleName
and B.Type = A.Type
and B.Id = A.Id
and B.ParentId = A.ParentId
)
and B.LanguageId <> 1051
在集合B中,更改所有LanguageId = 1051
SELECT B.*, 1051 as LenguajeID
FROM Translation B
<.. same as before ...>
将集 B 插入原始翻译 table
INSERT INTO Translation
SELECT [RowId],
[ModuleName],
[Type],
[Id],
[ParentId],
1051 [LanguageId],
[Text],
[X],
[Y],
[Width],
[Height],
[Pending],
[Remarks]
FROM Translation B
WHERE NOT EXISTS ( SELECT *
FROM Translation A
WHERE A.LanguageId = 1051
and B.Type = A.Type
and B.Id = A.Id
and B.ParentId = A.ParentId
and B.ModuleName = A.ModuleName
)
AND B.LanguageId <> 1051
SQL Fiddle Demo 仅供 select
Table结构
- RowId - 唯一标识符,默认值:newid()
- 模块名称 - nchar 25
- 类型 - int
- Id - 整数
- ParentId - int
- LanguageId - 整数
- 文本 - nvarchar 1024
- X - 整数
- Y - 整数
- 宽度 - 整数
- 身高 - 整数
- 待定 - smallint,默认值:0
- 备注 - nvarchar 250
我需要什么?
- 取
LanguageId = 1051
的所有记录,我们称这个集合为A - 取
LanguageId != 1051
的所有记录,我们称这个集合为B - 从集合 B 中移除,其中 all 这些条件适用:
B.ModuleName = A.ModuleName
B.Type = A.Type
B.Id = A.Id
B.ParentId = A.ParentId
- 根据
ModuleName
、Type
、Id
和ParentId
删除集合 B 中的重复项(如果都是一样,只留下一条记录) - 集合B,全部改成
LanguageId = 1051
- 插入集合B到原来的
Translation
table
我可以想象这个过程,但我不知道如何在SQL中实现。
非常感谢任何帮助。
insert into transision
select 1051 as LanguageId ,your columns.......
from B
left join A
on B.ModuleName != A.ModuleName and
B.Type != A.Type and
B.Id != A.Id and
B.ParentId != A.ParentId
where B.LanguageId !=1051
从满足所有这些条件的集合 B 中删除:
- B.ModuleName = A.ModuleName
- B.Type = A.Type
- B.Id = A.Id
- B.ParentId = A.ParentId
。等于这个
SELECT *
FROM Translation B
WHERE NOT EXISTS ( SELECT *
FROM Translation A
WHERE
A.LanguageId = 1051
and B.ModuleName = A.ModuleName
and B.Type = A.Type
and B.Id = A.Id
and B.ParentId = A.ParentId
)
and B.LanguageId <> 1051
在集合B中,更改所有LanguageId = 1051
SELECT B.*, 1051 as LenguajeID FROM Translation B <.. same as before ...>
将集 B 插入原始翻译 table
INSERT INTO Translation SELECT [RowId], [ModuleName], [Type], [Id], [ParentId], 1051 [LanguageId], [Text], [X], [Y], [Width], [Height], [Pending], [Remarks] FROM Translation B WHERE NOT EXISTS ( SELECT * FROM Translation A WHERE A.LanguageId = 1051 and B.Type = A.Type and B.Id = A.Id and B.ParentId = A.ParentId and B.ModuleName = A.ModuleName ) AND B.LanguageId <> 1051
SQL Fiddle Demo 仅供 select