mysql — левое соединение «один ко многим» принимает только один элемент и удаляет повторяющиеся поля

фон:

        Например, вам даны таблица пользователя и таблица региональной информации (каждая часть данных представляет собой региональную информацию провинции, города и округа, в частности округа). В таблице пользователя есть поле города, в котором находится пользователь. Вы должны основывать его на Таблице информации о районе проверяется код города, в котором находится пользователь. Будет ситуация, когда пользовательская таблица останется подключенной к таблице информации о регионе для сопоставления в соответствии с информацией о городе, один ко многим (например, в Хуэйчжоу 7 округов). На данный момент вам нужен только один случайный , вам не нужно несколько, давайте сейчас рассмотрим, как удалить дубликаты

sql примерно такой:

        выберите идентификатор таблицы пользователя, поле пользователя, код города   

        из пользовательской таблицы

        Левое соединение таблицы информации о городской зоне пользователя = городская зона таблицы площадей

Попробуй:

        Используйте РАЗЛИЧНЫЕ

Изменить SQL:

        выберите DISTINCT идентификатор таблицы пользователя, поле пользователя, код города   

        из пользовательской таблицы

        Левое соединение таблицы информации о городской зоне пользователя = городская зона таблицы площадей

результат:

        Это бесполезно. Причина в том, что ключевое слово DISTINCT MySQL означает, сколько полей следует, то есть сколько полей объединено вместе. После объединения все поля будут одинаковыми до устранения дублирования. Это не означает, что если вы поместите его перед идентификатором, поле идентификатора будет таким же. Дедупликация данных (честно говоря, я лично считаю это ключевое слово бесполезным. Все поля в запросе должны быть абсолютно одинаковыми для дедупликации. По сути, это эквивалентно иметь в таблице два одинаковых данных, что вообще невозможно).

Попробуйте два:

        Использовать группу по

Изменить SQL:

        выберите идентификатор таблицы пользователя, поле пользователя, код города   

        из пользовательской таблицы

        Левое соединение таблицы информации о городской зоне пользователя = городская зона таблицы площадей

        группировать по идентификатору пользовательской таблицы

результат:

        Этого можно достичь, поскольку после группировки идентификаторы пользователей нескольких фрагментов данных совпадают и делятся на одну и ту же группу, поэтому остается только один запрос, поэтому код города, который вы получаете, является случайным.

        Однако в более поздних версиях Bank MySQL есть настройка ONLY_FULL_GROUP_BY , что примерно означает, что если вы используете группу по, то поля в вашем выборе должны быть полями группы в группе по или другими агрегатными функциями. Поэтому (выберите идентификатор таблицы пользователя, поле пользователя, код города) сообщит об ошибке, которую вы можете использовать только (выбрать идентификатор таблицы пользователя) или сгруппировать по трем полям вместе (группировать по идентификатору таблицы пользователя, полю пользователя, коду города), но это эквивалентно отсутствию группировки, и в обычном запросе проекта имеется более трех полей. Они, конечно, не могут быть сгруппированы все, и эффективность очень низкая, поэтому это не будет работать, если вы не отключите ONLY_FULL_GROUP_BY выше или не используете младшая версия MySQL

Попробуйте три:

        На этот раз используется метод подзапроса. В подзапросе используется Group by , так что в подзапросе становятся одни данные для каждого города вместо исходных одних данных для каждого округа.

Изменить SQL:

        выберите идентификатор таблицы пользователя, поле пользователя, код города   

        из пользовательской таблицы

        оставил присоединиться 

                (выберите таблицу зон города,макс.(код города) 

                из таблицы информации о районе

                сгруппировать по регионам, таблица, городской район

                ) как д 

                на городской территории пользователя = городская территория таблицы d.region

результат:

        Успешно, в подзапросе один фрагмент данных для каждого городского района был получен путем группировки, а затем функция агрегирования max используется для поиска наибольшего кода городского района (эквивалентно случайному получению одного из данных), так что данные подзапроса и пользовательской таблицы взаимно однозначны, мы можем достичь наших потребностей

Заключение:

        Требования к загрузке основаны на примерах, с которыми я столкнулся в своей реальной работе. Я думаю, что многие друзья сталкивались с такой же ситуацией. Вышеупомянутое отражает только мой личный процесс обработки и мнения. Если у друзей есть другие лучшие методы, пожалуйста, просветите меня. , Спасибо

Guess you like

Origin blog.csdn.net/DGH2430284817/article/details/131458684