将两个不同表中的列与SQL Server中表2中最后插入的值进行比较

将两个不同表中的列与SQL Server中表2中最后插入的值进行比较,sql,sql-server,tsql,Sql,Sql Server,Tsql,如果SQL Server 2019数据库中有两个不同的表,如下所示: 表1 |id | name | +-----+--------+ | 1 | rose | | 2 | peter | | 3 | ann | | 4 | rose | | 5 | ann | 表2 | name2 | +--------+ |rose | |ann | 我只想从表1中检索与表2中的name2匹配的最后两个ID(在本例中为4和5)。换

如果SQL Server 2019数据库中有两个不同的表,如下所示:

表1

|id   | name   |
+-----+--------+
| 1   | rose   |
| 2   | peter  |
| 3   | ann    |
| 4   | rose   |
| 5   | ann    |
表2

 | name2  |
 +--------+
 |rose    |
 |ann     |
我只想从表1中检索与表2中的name2匹配的最后两个ID(在本例中为4和5)。换句话说,表1中最后添加的名称只匹配一次,此外,表2中要插入的ID(4,5)

如何使用SQL实现这一点


谢谢你

你似乎在描述:

select . . . -- whatever columns you want
from (select top (2) t1.*
      from table1 t1
      order by t1.id desc
     ) t1 join
     table2 t2
     on t2.name2 = t1.name;
对于您提供的数据,这似乎不是特别有用,但它符合您所描述的

编辑:

如果只需要最新匹配的行,请使用
行号()


您可以使用
row\u number()


你的问题很模糊,所以这里可能有很多答案。我的第一个想法是,你只需要一个内部连接。这将只获取两个表共享的数据

SELECT Table1.*
FROM Table1
INNER JOIN Table2 on Table1.name = Table2.name2

谢谢Larnu的回复,我更新了问题。如果您注意到表1中有2个以上的匹配项,那么它不仅会检索到2个带有Join的ID,而且还会返回4个ID,因为talble2中有4个匹配项@Larnu@Larnu抱歉,我的意思是Talble1中有四个匹配项是的,这将仅获取两个表共享的数据,这是表1中的四个不同ID。我需要的是只获取表1中最后添加的2个匹配项,而不是所有匹配项“仅获取最后添加的2个匹配项”-那么是否有一个日期列可以确定哪一个是最新的?如果没有这些,我不知道您希望如何完成输出。但是表1中最后添加的匹配也可能不在顶部(选择顶部(2))@GordonLinoff@Adam . . . 这更有道理,但肯定不是我最初理解你的问题的方式。
select name,id from
(
select *, row_number() over(partition by t.name order by id desc) as rn
 from table1 t join table2 t1 on t.name=t1.name2
)A where rn=1
SELECT Table1.*
FROM Table1
INNER JOIN Table2 on Table1.name = Table2.name2