我有两个SQL Server表。
首先填写语言代码(例如en,de,fr,..)。
第二个看起来像:
ID | Lang | Text
----------------
..1..|..en..|..one..
..1..|..de..|..eins..
..1..|..fr..|..une..
..2..|..en..|..two..
..2..|..de..|..zwei..
现在我想要的是通过每个ID的seconde表,检查每种语言是否有一行,如果没有添加空行。因此,对于上面的示例,第二个表将有一个额外的行:
..2..|..fr..|.. ..
有没有办法在SQL Server中实现这一点?
答案 0 :(得分:0)
如果您在第一张桌子上有ID,那么这应该是基本的连接问题,所以代码是:
declare @tabLanguages table (id int,Lang char(2))
insert into @tabLanguages
values (1,'en'),(2,'de'),(3,'fr')
declare @Translation table (id int, Lang char(2), Text nvarchar(200))
insert into @Translation
values
(1,'en','one'),
(1,'de','eins'),
(1,'fr','.une'),
(2,'en','two'),
(2,'de','zwei')
select isnull(t.id,l.Id) as ID,
isnull(t.Lang,l.Lang) as Lang,
t.Text
from @tabLanguages l
left outer join @Translation t on l.id = t.Id
order by Id
但是如果你在第一张表中没有Id,那么你可以使用以下内容:
declare @tabLanguages table (Lang char(2))
insert into @tabLanguages
values ('en'),('de'),('fr')
declare @Translation table (id int, Lang char(2), Text nvarchar(200))
insert into @Translation
values
(1,'en','one'),
(1,'de','eins'),
(1,'fr','.une'),
(2,'en','two'),
(2,'de','zwei')
select isnull(t.id,l.Id) as ID,
isnull(t.Lang,l.Lang) as Lang,
t.Text
from (
select *, row_number() over (order by Lang) as Id
from @tabLanguages t
) l
left outer join @Translation t on l.id = t.Id
order by l.Id