У меня четыре таблицы, и я хотел объединить все три таблицы с одной таблицей.
Я перечислил свою проблему следующим образом:
Таблицы:
users
user_training
user_courses
user_certificates
Я хотел получить данные из таблиц [2,3,4]
которые поле user_id
совпадает с полем ID
таблицы users
.
Когда я пытаюсь INNER JOIN
он дает мне результат для пользователей, которые являются общими во всех таблицах. Но я просто хотел проверить таблицы [2,3,4]
с таблицей [1] Records.
Мой запрос...
SELECT A.training_name AS 'training_name', C.course_name AS 'course_name', D.certificate_name AS 'certificate_name'
FROM user_training AS A INNER JOIN users AS B ON A.user_id=B.ID INNER JOIN user_courses AS C ON B.ID = C.user_id INNER JOIN user_certificates AS D ON B.ID = D.user_id;
Заранее спасибо.
использовать left join
select u.* from users u
left join user_training ut on ut.user_id=u.user_id
left join user_courses uc on uc.user_id=u.user_id
left join user_certificates uct on uct.user_id=u.user_id
С этим вы получаете всех пользователей и их соответствующие тренинги:
SELECT *
FROM 'users'
LEFT JOIN 'user_training' ON 'users'.'id' = 'user_training'.'user_id'
Изменение *_trainig
на *_courses
или *_certificates
вернет всех пользователей с уважаемыми курсами или сертификатами.
Если вам нужно получить данные в одном запросе, попробуйте следующее:
SELECT *
FROM 'users'
LEFT JOIN 'user_training' ON 'users'.'id' = 'user_training'.'user_id'
LEFT JOIN 'user_courses' ON 'users'.'id' = 'user_courses'.'user_id'
LEFT JOIN 'user_certificates' ON 'users'.'id' = 'user_certificates'.'user_id'
Если пользователь не имеет тренинги, курсы, сертификаты все остальные поля будут null
-ed.
LEFT JOIN
. Пользователи, не имеющие записей в_training
,_courses
или_certificates
будут просто иметь значенияNULL
в этих полях.