Добавляет ли Distinct какое-либо значение или что-то делает в этом запросе?

325
NZ Dev

Предполагая, что поле Users.Id является уникальным, автоматически увеличивается. МОЙ ГЛАВНЫЙ ВОПРОС: Делает ли "Distinct" в этом запросе какие-либо действия, совершенно бессмысленно иметь его в этом конкретном запросе?

SELECT DISTINCT users.id, CONCAT(users.firstname, ' ', users.surname) AS name FROM users  WHERE users.id!=$me AND (LOWER(users.firstname) LIKE '$term%' AND (email='$email' OR username='$email')) 

-

Если запрос был изменен на:

SELECT DISTINCT users.surname, firstname, surname FROM users WHERE surname = 'Smith'' 

Тогда я могу получить в качестве результата только Джейн Смит или Джона Смита, но не их обоих или кого-либо еще с именем Смит, верно?

(Верхний запрос является оригиналом)

1
Да, это правильно, если вы перейдете к использованию `DISTINCT users.surname, firstname, фамилия`, то вы можете быть уверены, что получите только отдельные значения для этих выбранных полей. Если у вас есть Джейн Смит и Джон Смит, обе эти записи все равно будут перечислены. Если у вас есть 2 или более Джона Смита, хотя, например, вы получите только одну отдельную запись для Джона Смита, но не обе, поэтому использование `DISTINCT` можно использовать для одного или нескольких полей, гарантируя, что эти записи полей не являются дублирующимися значениями (т.е. ) где все значения одинаковы. https://www.w3schools.com/sql/sql_distinct.asp Pimp Juice IT 6 лет назад 0
Итак, что вы говорите: «все выбранные поля используются в различных». Таким образом, в первом запросе поле id сделало бы отдельный бесполезным, потому что каждый идентификатор уникален? и во втором запросе 2 Джон Смитс будет возвращен как один результат, но Джон и Джейн будут возвращены как 2 результат? NZ Dev 6 лет назад 0
Это звучит правильно для меня, но вы можете легко проверить это, чтобы подтвердить, правильно? Я почти уверен, что это то же самое, поэтому проведите тестовый прогон и подтвердите, что, как я помню, он работал в последний раз, когда я его использовал, но вы можете легко протестировать и подтвердить с помощью простого запроса выбора теста. Pimp Juice IT 6 лет назад 0

1 ответ на вопрос

0
RajBedi

Предложение DISTINCT, удаляет дублирующую запись из вывода запроса на выборку. Итак, если какой-либо из столбцов SELECT в вашем запросе является УНИКАЛЬНЫМ, то нет смысла использовать DISTINCT. Это может замедлить производительность, так как сервер БД попытается обнаружить дублирующиеся записи, которых там нет. В первом запросе, так как вы возвращаете идентификатор пользователя, который является уникальным - так что даже если вы удалите уникальный, результаты не изменятся, и вы также должны увидеть более высокую производительность.

Во втором запросе, если два или более пользователей имеют одно и то же имя, вы получите один результат.

Спасибо. Я выбрал ваш ответ, потому что мне понравился ваш первый абзац. Ваше последнее предложение немного двусмысленно. Возможно, в нем должно быть сказано: «Во втором запросе, если два или более пользователей имеют одно и то же полное имя, вы в итоге получите один результат». еще раз спасибо NZ Dev 6 лет назад 0