#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» сработала отлично. Наборы данных были объединены, как и ожидалось, без дублирования идентификатора в результирующем наборе.