SQL在另一个表的每一行上筛选一个表

SQL在另一个表的每一行上筛选一个表,sql,sql-server-2008,Sql,Sql Server 2008,我有一张桌子,一张: |Id|alias | ------------ |1 |alice | |2 |alice | |2 |bob | |3 |alice | |3 |bob | |3 |charlie| 我还有一张桌子,N: |name | ------- |alice| |bob | 我正在寻找一个查询来返回第一个表中的所有ID以及第二个表中的两个别名。在这个例子中,我想看到 `(2, 3)` 我不能使用简单的连接 select Id from A

我有一张桌子,一张:

|Id|alias  |
------------
|1 |alice  |
|2 |alice  |
|2 |bob    |
|3 |alice  |
|3 |bob    |
|3 |charlie|
我还有一张桌子,N:

|name |
-------
|alice|
|bob  |
我正在寻找一个查询来返回第一个表中的所有ID以及第二个表中的两个别名。在这个例子中,我想看到

`(2, 3)`
我不能使用简单的连接

select Id
  from A
    join N on A.alias = B.name
A中的每个记录都有alice,所以这个查询返回1,这不是我想要的。我很难想出一种语法来做这种事情。建议?我使用的是TSQL和Sql Server,如果有区别的话


TIA

使用
分组方法
进行

select id
from a join
     n
     on a.alais = n.name
group by id
having count(*) = (select count(*) from n);

这假定
n
中的名称是唯一的。如果没有,您需要的是
count(distinct)
而不是两个
count(*)
s.

您还可以包括预期结果吗?对不起,我的预期结果有点隐藏在文本中。我为你喊了出来。