我在具有列FirstID和SecondID的(SQL Server 2014)数据库中有一个联结表。给定一个特定的FirstID,我希望从表中找到所有其他具有等效SecondIDs集合的FirstID(即使该集合是空的)。 示例数据:在数据库表中查找匹配集合
FirstId SecondId
1 1
1 2
2 3
3 1
3 2
... ...
在样本数据的情况下,如果我指定FirstID = 1,则我期望3出现在结果集。
我试过以下,到目前为止,这工作得很好,除了空集:
SELECT FirstSecondEqualSet.FirstId
FROM FirstSecond FirstSecondOriginal
INNER JOIN FirstSecond FirstSecondEqualSet ON FirstSecondOriginal.SecondId = FirstSecondEqualSet.SecondId
WHERE FirstSecondOriginal.FirstId = @FirstId
AND FirstSecondEqualSet.FirstId != @FirstId
GROUP BY FirstSecondEqualSet.FirstId
HAVING COUNT(1) = (SELECT COUNT(1) FROM FirstSecond WHERE FirstSecond.FirstId = @FirstId)
谢谢,但是这基本上是我在我的问题写了同样的事情(唯一的区别是,你从WHERE子句联接表达式,它是由相同的解释移动f1.FirstId <> f2.FirstId大多数RDBMS引擎)。 – Patrick
噢,对不起。你能否详细说明* empty set *问题? –
编辑:没关系,我只是意识到空集的东西是没有意义的,没有领域的情况下,并不是真的那个正确的场地。 – Patrick