Я пытаюсь написать запрос SQL, который соберет определенные данные в одну таблицу на основе данных из нескольких других таблиц. Эта часть была достаточно легкой. К сожалению, мне также нужно восстановить данные из второй таблицы, и это нужно сделать с помощью левого соединения.
Если я просто сделаю левое соединение, e. г.
select *
from table_A A
left join table_B B on A.id=B.id
все хорошо. Я могу достаточно безопасно добавить предложение where, например
where A.id>5
Проблема возникает, когда я пытаюсь разместить несколько таблиц с левой стороны, например
select *
from table_A, table_C
left join table_B on A.id=B.id
where table_A.id=table_C.id
Внезапно A.id больше не является признанным столбцом. Я попытался изменить его, чтобы выбрать A.id в качестве foo, а затем выполнить команду на foo = B.id, но foo также не распознается. (Неизвестный столбец «бла» в «предложении»)
Несмотря на то, что существует множество ссылок, в которых объясняется, как сделать предложение объединения, а в некоторых примерах даже используется простое предложение where, я не могу найти ни одного, который бы объединял предложение join, предложение where и несколько таблиц в левая сторона.
Для справки по вопросу:
Мой оригинальный запрос был:
select SQL_CALC_FOUND_ROWS tutor_user.username
, tutor_user.userid
, tutor_tutor.rate
, tutor_user.username
from tutor_user
, tutor_attends
, tutor_tutors_in
, tutor_subject
, tutor_tutor
where tutor_user.userid=tutor_attends.userid
and tutor_attends.schoolid=80
and tutor_tutors_in.userid=tutor_user.userid
and tutor_tutors_in.subjectid=tutor_subject.subjectID
and tutor_subject.name='Aerospace Studies'
and tutor_tutor.userid=tutor_user.userid //ERROR
LIMIT 0, 15
К сожалению, нет гарантии, что информация tutor_tutor будет существовать для каждого пользователя - незначительный недостаток, который сохраняется из-за неправильных решений на ранних этапах цикла разработки веб-сайта / базы данных. Итак, простое решение - превратить его в объединение.
Проблема в том, что я не могу найти хороших учебных пособий, объясняющих, как объединять предложения с предложениями where. Мое лучшее усилие заключается в следующем:
select SQL_CALC_FOUND_ROWS tutor_user.username
, tutor_user.userid
, tutor_tutor.rate
, tutor_user.username
from tutor_user
, tutor_attends
, tutor_tutors_in
, tutor_subject
LEFT JOIN tutor_tutor
on tutor_user.userid=tutor_tutor.userid
where tutor_user.userid=tutor_attends.userid
and tutor_attends.schoolid=80
and tutor_tutors_in.userid=tutor_user.userid
and tutor_tutors_in.subjectid=tutor_subject.subjectID
and tutor_subject.name='Aerospace Studies'
LIMIT 0, 15