REPLACE иногда кажется необходимым, потому что INSERT IGNORE не работает с преобразованиями данных.
Если я сделаю это, я установлю только самый большойCityPop для себя:
ВСТАВИТЬ ИГНОРИРОВАНИЕ В Крупнейшие города (stateID, largeCityPop, statePop) ВЫБЕРИТЕ stateID, MAX (city.pop) как largeCityPop, state.pop ИЗ города ПРИСОЕДИНЯЙТЕСЬ к состоянию на city.stateID = state.ID ГРУППА ПО city.stateID ПРИ ДУБЛИКАЦИИ КЛЮЧЕВОГО ОБНОВЛЕНИЯ largeCityPop = largeCityPop
Если я это сделаю, я неправильно использую функцию GROUP:
ВСТАВИТЬ ИГНОРИРОВАНИЕ В Крупнейшие города (stateID, largeCityPop, statePop) ВЫБЕРИТЕ stateID, MAX (city.pop) как largeCityPop, state.pop ИЗ города ПРИСОЕДИНЯЙТЕСЬ к состоянию на city.stateID = state.ID ГРУППА ПО city.stateID НА ДУБЛИКАТЕ КЛЮЧЕВОГО ОБНОВЛЕНИЯ largeCityPop = MAX (город. поп)
И если я это сделаю, MySQL не распознает имя столбца:
ВСТАВИТЬ ИГНОРИРОВАНИЕ В Крупнейшие города (stateID, largeCityPop, statePop) ВЫБЕРИТЕ stateID, MAX (city.pop) как largeCityPop, state.pop ИЗ города ПРИСОЕДИНЯЙТЕСЬ к состоянию на city.stateID = state.ID ГРУППА ПО city.stateID НА ДУБЛИКАЦИОННОМ ОБНОВЛЕНИИ КЛЮЧА largeCityPop = city .largestCityPop
Это работает, но кажется просто уродливым:
ВСТАВИТЬ ИГНОРИРОВАНИЕ В Крупнейшие города (stateID, largeCityPop, statePop) ВЫБРАТЬ * ИЗ (ВЫБЕРИТЬ stateID, MAX (city.pop) как BigCityPop, state.pop FROM city JOIN state on city.stateID = state.ID BY city.stateID) x ON ДУБЛИКАЦИОННОЕ ОБНОВЛЕНИЕ КЛЮЧА largeCityPop = BigCityPop