mysql получает конкретное уникальное количество строк из одной таблицы в запросе на соединение - PullRequest
0 голосов
/ 14 марта 2019

У меня есть таблица 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 голосов
/ 14 марта 2019

С EXISTS:

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

Возвращает 100 уникальных строк строк, поскольку email_sha256 равно unique в результатах.

0 голосов
/ 14 марта 2019

1)

Обычно это работает, но может возвращать один и тот же результат несколько раз, если есть несколько запросов с одним и тем же адресом электронной почты.Есть ли способ убедиться, что я получаю 100 уникальных результатов вместо дубликатов?

Использовать GROUP BY Документы .

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

2)

Соединение кажется очень медленным.Есть ли лучший способ получить желаемый результат.например, используя EXISTS?

Мы не можем конкретно ответить на этот вопрос без объяснения и / или информации о таблицах (таблицах) .Однако наиболее вероятным ответом является то, что вы не проиндексировали правильные столбцы.

У вас должен быть индекс для столбца JOIN ing и столбца (столбцов) GROUP BY.В этом случае это то же самое - results.email_sha256 и requests.email_sha256.

Это хорошее начало, также есть множество более специфичных вопросов и ответов по переполнению стека в различных вопросах медленного возврата результатов MySQL ....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...