Sql 检查一个表的条目是否在另一个表中
我有两个SQL Server表 第一个由语言代码(例如en、de、fr等)填充 第二个看起来像:Sql 检查一个表的条目是否在另一个表中,sql,sql-server,Sql,Sql Server,我有两个SQL Server表 第一个由语言代码(例如en、de、fr等)填充 第二个看起来像: ID | Lang | Text ---------------- ..1..|..en..|..one.. ..1..|..de..|..eins.. ..1..|..fr..|..une.. ..2..|..en..|..two.. ..2..|..de..|..zwei.. 现在我要做的是在每个ID上遍历第二个表,检查每种语言是否有一行,如果没有,则添加一个空行。因此,对于上面的示例,第
ID | Lang | Text
----------------
..1..|..en..|..one..
..1..|..de..|..eins..
..1..|..fr..|..une..
..2..|..en..|..two..
..2..|..de..|..zwei..
现在我要做的是在每个ID上遍历第二个表,检查每种语言是否有一行,如果没有,则添加一个空行。因此,对于上面的示例,第二个表将增加一行:
..2..|..fr..|.. ..
有没有办法在SQL Server中实现这一点?如果您在第一个表中有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
这是基本的连接问题,请阅读一些关于连接的SQL手册。第3列文本中的附加行应该得到什么值?@sagi只是一个空字符串。