【问题标题】:SQL - Tags searching querySQL - 标签搜索查询
【发布时间】:2016-09-10 15:24:22
【问题描述】:

我的数据库中有下表:

ID  name
1   x
2   x
3   y
1   y
1   z

现在我只想选择同时具有“x”和“y”值标签名称的对象(ID)。在这种情况下,这将仅是 ID = 1 的记录,因为搜索的值集('x' 和 'y')是此记录可能名称集('x'、'y' 和 'z')的子集。

如何编写 SQL 查询?
感谢您的帮助 :)

【问题讨论】:

    标签: sql sqlite search tags


    【解决方案1】:

    一种方法使用聚合:

    select id
    from t
    where name in ('x', 'y')
    group by id
    having count(*) = 2;
    

    如果您关心性能,您可能希望将其与以下内容进行比较:

    select id
    from t tx join
         t ty
         on tx.id = ty.id and tx.name = 'x' and ty.name = 'y';
    

    第一个版本更容易泛化到更多标签。在某些情况下,第二个可能有更好的性能。

    【讨论】:

    • 很可能,在第一个查询的情况下,这应该不是问题,除非NameID 相比不是唯一的,但如果ID 包含,则可以选择它相同name 值的倍数。第二个查询可能更理想。
    • @gmiley 。 . .如果重复是一个问题,那么只需使用count(distinct name) = 2。样本数据并不表明重复是一个问题。同样,如果name 可能是NULL,那么 OP 需要解释如何处理这些值。
    • 是的,这不是什么大不了的事,但认为至少值得指出,因为它可能会出现在 OP 中。 =)
    猜你喜欢
    • 2011-07-14
    • 2012-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-06
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多