【问题标题】:SQL query to return records that are exclusively of one type用于返回仅属于一种类型的记录的 SQL 查询
【发布时间】:2011-09-19 16:13:54
【问题描述】:

我尝试查找有关我正在尝试编写的查询的一些信息并提出了一些想法,但没有足够可靠的方法可以使用。我想我对自己需要做什么有一个大致的了解,但我只是错过了一点点推动,是吗?

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

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

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 或其他东西来(也许?)检查行数,但我似乎无法带来拼凑起来。

任何提示,或者一些关于搜索什么的 cmets?

【问题讨论】:

    标签: sql group-by having


    【解决方案1】:

    T-SQL

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

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

    您不能进行 Group By,因为在按 LinkID 分组时会丢失有关 LinkType 的信息,因此 SubQuery 是唯一的方法(在这种情况下也是最清楚的)。

    【讨论】:

    • 该死的,你做的比我想象的要容易。非常感谢!
    • 没问题。很高兴它有帮助:)
    猜你喜欢
    • 2011-07-18
    • 2016-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-12
    • 2021-12-26
    • 2014-10-08
    • 2021-02-02
    相关资源
    最近更新 更多