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

时间:2016-02-04 14:18:20

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

..2..|..fr..|.. ..

有没有办法在SQL Server中实现这一点?

1 个答案:

答案 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