如何为以下输出编写查询?

Pav*_*van 4 sql sql-server

我有两个表Names和Name_ids,如下所示.

平台:SQL Server 2005/2008.

Names table:
    Nam                              ID
    -------------------------------- -----------
    A                                1
    B                                2
    C                                3
    D                                4
    E                                5
    F                                6
    G                                7
    H                                8
Run Code Online (Sandbox Code Playgroud)

name_ids table

ID
-----------
3
6
8
Run Code Online (Sandbox Code Playgroud)

我想生成以下输出连接这些表.

Nam                              Nam_ID      ID
-------------------------------- ----------- -----------
A                                1           NULL
B                                2           NULL
C                                3           3
D                                4           3
E                                5           3
F                                6           6
G                                7           6
H                                8           8
Run Code Online (Sandbox Code Playgroud)

逻辑是将nam_id与id匹配,如果nam_id小于任何id,则返回NULL.如果nam_id大于或等于id,则返回id.这是捕获.在上面的例子中,对于F,6我们不应该返回F,6,3组合,但我们应该只返回匹配的F,6,6.当匹配项找到像6,6时,它应该跳过其他匹配,如6,3.之后使用7,6而不是7,3.如何编写上面的SQL查询?查询是时间密集的,需要快速执行.

Scripts:
Create table Names(Nam nvarchar(32), ID int);

insert into names values('A', 1);
insert into names values('B', 2);
insert into names values('C', 3);
insert into names values('D', 4);
insert into names values('E', 5);
insert into names values('F', 6);
insert into names values('G', 7);
insert into names values('H', 8);


Create table name_ids( ID int);
insert into name_ids values(3);
insert into name_ids values(6);
insert into name_ids values(8);
Run Code Online (Sandbox Code Playgroud)

请帮忙.

更新:嘿伙计们,非常感谢您提供解决方案的努力.现在我很困惑,选择性能最佳的查询.我已经选择了很少并试图用非常大的结果集来分析性能.

Rap*_*aus 5

select n.Nam, 
CASE WHEN ni.ID IS NULL THEN (SELECT MAX(ID) from name_ids n1 where
                              n1.ID < n.ID)
                        ELSE  ni.ID
                        END
from Names n
left join name_ids ni on n.ID = ni.ID
Run Code Online (Sandbox Code Playgroud)

SqlFiddle