SQL在另一行的每一行上过滤一个表

时间:2018-04-28 21:31:17

标签: sql sql-server-2008

我有一张桌子,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

1 个答案:

答案 0 :(得分:1)

使用group byhaving

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

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