Выберите все поля при работе с несколькими внутренними соединениями

Вы можете установить переменную окружения в масштабе всей системы, установив ее в /etc/default/locale. Это установит его для всех пользователей, поэтому вы хотите быть уверены, что это то, что вы действительно хотите. Имейте в виду, что локальные настройки (например, в .bashrc) переопределяют общесистемную настройку.

0
задан 13 August 2018 в 14:33

2 ответа

id name email

Ваш запрос прекрасен, кроме select. У MySQL нет понятия «записи», которые представляют всю строку в таблице. Вы должны явно указать столбцы:

SELECT c1.id AS nutrition_coach_id,
       c1.name AS nutrition_coach_name,
       c1.email AS nutrition_coach_email,       
       c2.id AS movement_coach_id,
       c2.name AS movement_coach_name,
       c2.email AS movement_coach_email,
       c3.id AS mental_coach_id,
       c3.name AS mental_coach_name,
       c3.email AS mental_coach_email
1
ответ дан 15 August 2018 в 17:03

Ваш оператор select просто ссылается на псевдонимы, которые представляют таблицы, но фактически не указывает, какой столбец вы хотите использовать. Предположительно, вы хотите сообщить имена трех разных типов тренеров, в которых должно работать следующее:

SELECT
    c1.name AS nutrition_coach,
    c1.email AS nutrition_coach_email, -- etc. for other fields
    c2.name AS movement_coach,
    c3.name AS mental_coach
FROM participant_coaches AS pc 
INNER JOIN coaches AS c1
    ON pc.nutrition_coach = c1.id 
INNER JOIN coaches AS c2
    ON pc.movement_coach = c2.id 
INNER JOIN coaches AS c3
    ON pc.mental_coach = c3.id 
WHERE participant = <participantId>
0
ответ дан 15 August 2018 в 17:03
  • 1
    Да, я понимаю, что это моя проблема. Но предположим, что у меня много полей, и я хочу выбрать их все, есть ли способ сделать это, или мне нужно вводить каждое имя поля вручную? в идеале я мог бы сделать c1.* AS nutrition_coach, но это не сработало – Nicolas 13 August 2018 в 14:34
  • 2
    Да, c1.* выберет все поля тренера для тренера по питанию, , но , вы не можете дать ему псевдоним столбца, потому что это, как правило, несколько столбцов. В общем случае использование SELECT * является плохим и его следует избегать. – Tim Biegeleisen 13 August 2018 в 14:35
  • 3
    Итак, если я правильно понимаю, ответ, который я хочу (как показано в OP), невозможен с помощью SQL-запроса? – Nicolas 13 August 2018 в 14:37
  • 4
    @Nicolas Да, это, см. Ответ Гордона, который, очевидно, прочитал ваш вопрос более подробно, чем я. Просто выберите нужные столбцы, id, name, email, из таблицы тренера. – Tim Biegeleisen 13 August 2018 в 14:38

Другие вопросы по тегам:

Похожие вопросы: