Недавно я просматривал код своей базы данных, пытаясь улучшить свой старый код с помощью новых методов, чтобы сделать его более эффективным. Недавно я искал JOINs и обнаружил, как мне показалось, прекрасную возможность проверить это.
В настоящее время я использую следующие два запроса для формирования списка групп для пользователя:
SELECT g.group_id, g. name
FROM assigned_groups ag, user_groups g
WHERE ag.user_id=:user_id AND ag.group_id=g.group_id
SELECT g.group_id, g. name
FROM users u, user_groups g
WHERE u.user_id=:user_id AND u.base_group=g.group_id
Эти два утверждения дают мне список, но я хотел бы объединить их в одно. Единственный улов - пользователь может иметь или не иметь какие-либо группы, перечисленные в "assign_groups". То есть это необязательно.
Из того, что я понимаю, это означает, что мне нужно ЛЕВОЕ или ПРАВОЕ соединение. В настоящее время у меня есть следующий синтаксис:
SELECT g.group_id, g. name
FROM
user_groups g, users u
LEFT JOIN assigned_groups ag ON ag.user_id=:user_id AND ag.group_id=g.group_id
WHERE
u.base_group=g.group_id AND u.user_id=:user_id
Однако это дает мне следующую ошибку:
Неизвестный столбец 'g.group_id' в 'предложении'
Вот изображение моей структуры таблицы:
