Хорошо, я изменился на LEFT JOIN
Теперь моя проблема в том, что столбцы user_id и group_id в таблице users перезаписываются столбцами из group_permissions & users_permissions, в результате чего значение равно NULL.
Ваш запрос:
SELECT *
FROM users
LEFT JOIN
group_permissions
ON group_permissions.group_id = users.group_id
LEFT JOIN
users_permissions
ON users_permissions.user_id = users.user_id
WHERE users.username = 'admin'
вернет все поля из всех трех таблиц.
Он ничего не будет "перезаписывать", скорее он вернет два поля с именем user_id
и два поля с именем group_id
: те, которые принадлежат users
и те, которые принадлежат соответствующим таблицам.
Это может запутать клиента, особенно если вы используете ассоциативный массив для доступа к полям (например, mysql_fetch_assoc
в PHP
).
Вы должны явно указать набор столбцов, которые вы хотите вернуть, возможно, присвоив им псевдонимы, если имена совпадают:
SELECT users.username, users.surname,
group_permissions.permission AS group_permission,
users_permissions.permission AS users_permission
FROM users
LEFT JOIN
group_permissions
ON group_permissions.group_id = users.group_id
LEFT JOIN
users_permissions
ON users_permissions.user_id = users.user_id
WHERE users.username = 'admin'