MySQL — удаление столбцов идентификаторов, используемых для объединения

#mysql #sql #database

#mysql #sql #База данных

Вопрос:

У меня есть 3 таблицы данных, которые я объединяю. Я использую столбец идентификатора (день) в каждой таблице, чтобы объединить данные вместе. Следующий SQL-запрос работает и предоставляет следующий набор столбцов:

 SELECT * 
FROM records 
LEFT JOIN macro_nutrients ON macro_nutrients.day = records.day 
LEFT JOIN micro_nutrients ON micro_nutrients.day = records.day

day|date|calories_in|calories_out|day|fat|sugar|protein|day|iron|cholesterol|potassium|vitamin_a|vitamin_c|
  

Когда я объединяю таблицы, поле «день» (которое работает как мой первичный ключ для объединения таблиц) выводится каждый раз (в 3 таблицах будут перечислены три поля дня). Я хотел бы исключить поля дня из моего набора столбцов, поскольку они не нужны.

Будет ли это достижимо только путем явного указания полей, которые я хочу, в моем операторе выбора (например. macro_nutrients.fat)? к сожалению, это было бы довольно подробно, если это так. Любопытно, есть ли более компактный способ.

Комментарии:

1. Не используйте SELECT * , если вы хотите больше контролировать, какие столбцы извлекать.

Ответ №1:

Вы можете использовать USING :

 SELECT * 
FROM records r LEFT JOIN
     macro_nutrients man
     USING (day) LEFT JOIN
     micro_nutrients mn
     USING (day);
  

USING является стандартным синтаксисом SQL, который поддерживают как SQLite, так и MySQL. При * использовании with USING столбцы, используемые в качестве JOIN ключей, не дублируются в результирующем наборе. Во внешнем соединении значением является фактическое значение в данных, а не несопоставимое NULL значение.

Комментарии:

1. Команда «using» сработала отлично. Наборы данных были объединены, как и ожидалось, без дублирования идентификатора в результирующем наборе.