【问题标题】:SQLite: query for all unique elements from multiple columns and multiple tablesSQLite:从多个列和多个表中查询所有唯一元素
【发布时间】:2015-07-02 02:50:00
【问题描述】:

我得到了一个类似于这个的 SQLite 表:

我想执行一个查询,返回此表中的所有唯一用户 ID(即列 first_user_idsecond_user_idthird_user_id 上的所有唯一值)。在上面的示例中,此查询将返回 1, 2, 3, 5, 6, 7

我需要这个查询高效。

问题的第二部分涉及相同的功能,但通过多个表的多个列实现。例如,如果我也有下表:

我想知道列first_user_idsecond_user_idthird_user_idfirst_owner_idsecond_owner_id 上的所有唯一值。对于上面的两个表,此查询将返回 1, 2, 3, 4, 5, 6, 7

谢谢

【问题讨论】:

    标签: sqlite


    【解决方案1】:

    一个简单的解决方案如下:

    SELECT first_user_id AS user_id FROM Participants
    UNION
    SELECT second_user_id AS user_id FROM Participants
    UNION
    SELECT third_user_id AS user_id FROM Participants
    

    并以这种方式继续处理其他表中的所有其他列。

    【讨论】:

    • 哦,谢谢,这行得通(至少对于单张桌子)!我尝试使用 || 运算符,但它转而实现不同的功能。这个查询的效率如何?我问是因为您称其为“简单”,但我宁愿选择“高效”)
    • 为了提高效率,如果插入不是太频繁,您应该尝试在所有表的所有列上放置一个索引。另一种可能性是根据问题域更改表的设计。
    • 索引不加速 UNION 的计算。
    • @CL。我不明白你的评论。您能否解释一下“不加快 UNION 计算速度的索引”是什么意思?也许这是微不足道的事情,但我真的是 SQL 的新手......
    • UNION 总是将所有行放到一个临时表中(并且各个子查询必须扫描它们的整个表并且也不使用索引)。
    猜你喜欢
    • 1970-01-01
    • 2020-02-26
    • 2013-10-29
    • 2012-01-10
    • 2014-08-16
    • 2011-02-11
    • 1970-01-01
    • 2011-10-25
    • 1970-01-01
    相关资源
    最近更新 更多