Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 检查一个表的条目是否在另一个表中_Sql_Sql Server - Fatal编程技术网

Sql 检查一个表的条目是否在另一个表中

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上遍历第二个表,检查每种语言是否有一行,如果没有,则添加一个空行。因此,对于上面的示例,第

我有两个SQL Server表

第一个由语言代码(例如en、de、fr等)填充

第二个看起来像:

 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只是一个空字符串。