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

1

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

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''

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

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

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

Ответы:

0

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

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

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