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

时间:2019-03-13 21:29:48

标签: mysql join

我有一个requests和一个results表。每个都有一个email_sha256列。

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

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

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

  2. 连接似乎很慢。有没有更好的方法来获得期望的结果。例如使用EXISTS

2 个答案:

答案 0 :(得分:0)

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)

  

加入似乎很慢。有没有更好的方法来获得期望的结果。例如使用EXISTS吗?

没有an explanation和/或information about the table(s),我们无法具体回答。但是,最可能的答案是您没有索引正确的列。

您应该在JOIN ing列和GROUP BY列上建立索引。在这种情况下,相同-results.email_sha256requests.email_sha256

这是一个好的开始,关于MySQL缓慢返回结果的各种问题,Stack Overflow也有很多更具体的问答。...

答案 1 :(得分:0)

具有EXISTS:

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

由于结果中email_sha256unique,因此该方法返回100个唯一行。

相关问题