SQL查询返回仅属于一种类型的记录

时间:2011-09-19 16:13:55

标签: sql group-by having

我已经尝试寻找一些关于我正在尝试编写的查询的信息并提出一些想法,但没有什么可以使用的。我想我对我需要做什么有一个大概的想法,但我只是错过了那个小推动,是吗?

我想要做的是编写一个查询,只获取“类型”只有一个值的记录,拒绝可能存在我正在寻找的几种类型的记录但是一个不同的整个集合无效。

我意识到这有点令人困惑,所以这是一个例子:

LinkId  LinkType
1234    A
1234    B
1235    A
1236    A
1236    A

让我们说LinkType'A'的记录是我感兴趣的。如果LinkId只有'A'记录,我想要它。如果它有一些(1或多个,无关紧要)A记录和其他一些值的记录,请不要理会。例如,在上面的示例表中,ID 1234已经输出,但1235和1236有效。

现在我知道我可以做像

这样的事情
SELECT LinkId, LinkType
FROM dbo.ExampleTable
GROUP BY LinkId, LinkType

将表格折叠为类似

的内容
LinkId  LinkType
1234    A
1234    B
1235    A
1236    A

然后我被卡住了。我想我需要在这里使用 HAVING 子句,并怀疑我需要使用COUNT或其他东西(可能?)检查行数,但我似乎无法带来碎片。

有关搜索内容的任何提示,或者某些意见吗?

1 个答案:

答案 0 :(得分:2)

T-SQL

SELECT *
FROM ExampleTable
WHERE LinkID NOT IN 
(
    SELECT LinkID
    FROM ExampleTable
    WHERE LinKType != 'A'
)

应该做你想做的事。 因此,获取不属于A类型的LinkID列表, 然后获取不在之前选择中的LinkID列表(因此只显示As)

你不能进行分组依据,因为在按LinkID分组时你会丢失有关LinkType的信息,所以SubQuery是唯一的方法(在这种情况下最清楚)。