代码之家  ›  专栏  ›  技术社区  ›  Chris

mysql在联接查询中从一个表中获取特定的唯一行数

  •  0
  • Chris  · 技术社区  · 6 年前

    我有一个 requests 还有 results 桌子每个都有一个 email_sha256

    请求可能包含同一电子邮件的多行,而电子邮件在结果中是唯一的。结果表中的电子邮件可能不存在于请求表中。

    我想获得100个结果,其中请求表中存在一封电子邮件:

    SELECT results.* FROM results
    INNER JOIN requests ON results.email_sha256 = requests.email_sha256
    LIMIT 100
    
    1. 这通常是可行的,但如果同一封电子邮件中有多个请求,它可能会多次返回相同的结果。 有没有办法确保我得到100个唯一的结果而不是重复的结果?

    2. 连接似乎很慢。有没有更好的方法来达到预期的效果。e、 g.使用 EXISTS ?

    2 回复  |  直到 6 年前
        1
  •  0
  •   Martin Miguel Stevens    6 年前

    1)

    这通常是可行的,但如果同一封电子邮件中有多个请求,它可能会多次返回相同的结果。有没有办法确保我得到100个唯一的结果而不是重复的结果?

    使用 GROUP BY Docs .

    SELECT results.* FROM results
    INNER JOIN requests ON results.email_sha256 = requests.email_sha256
    GROUP BY results.email_sha256 
    LIMIT 100
    

    2)

    连接似乎很慢。有没有更好的方法来达到预期的效果。e、 g.是否存在使用?

    我们无法在没有 an explanation 和/或 information about the table(s) 。然而,最可能的答案是,您没有为正确的列编制索引。

    你应该在你的网站上有一个索引 JOIN ing专栏和你的 分组 列(s)。在这种情况下也是一样的- results.email_sha256 requests.email_sha256 .

    这是一个好的开始,还有很多更具体的问题;MySQL返回结果缓慢的各种问题导致堆栈溢出。。。。

        2
  •  0
  •   forpas    6 年前

    存在着:

    SELECT r.* FROM results r
    WHERE EXISTS (
     SELECT 1 FROM requests WHERE email_sha256 = r.email_sha256
    )
    LIMIT 100
    

    这将返回自 email_sha256 unique 结果呢。