我目前有以下SQL语句:
SELECT s.first_name, s.last_name, tgs.group_identifier
FROM staff s
JOIN staff_training st
ON s.staff_id = st.staff_id
JOIN training_group_staff tgs
ON st.staff_training_id = tgs.staff_training_id
WHERE st.staff_course_id = '164'
training_group_staff
仅包含staff_training_id
和training_group_id
此声明按预期工作,并返回参加课程164的所有员工姓名,并且已被放入一个组(使用group_identifier
字段标识)。
我尝试做的是在培训课程164上显示所有用户,如果没有选择任何组(staff_training_id
中的特定training_group_staff
将没有行),则返回null列。
视觉示例
当前报表返回:
first_name | last_name | group_identifier
Jim | Jones | 3
Harry | Jones | 6
我试图返回的是:
first_name | last_name | group_identifier
Jim | Jones | 3
Harriet | Smith | NULL // No row in training_group_staff
Harry | Jones | 6
我尝试了几个连接,但似乎返回相同的结果 - 在一个查询中是否可以获得所需的输出?
答案 0 :(得分:2)
尝试使用LEFT JOIN
。应该是你想要的。
答案 1 :(得分:1)
两件事:
LEFT JOIN
表training_group_staff
null
SELECT s.first_name
, s.last_name
, IF(tgs.group_identifier = '', null, group_identifier) AS group_identifier
FROM staff s
JOIN staff_training st
ON s.staff_id = st.staff_id
LEFT JOIN training_group_staff tgs
ON st.staff_training_id = tgs.staff_training_id
WHERE sm.staff_course_id = '164'
答案 2 :(得分:1)
如果要在NULL
次操作后加入JOIN
,请使用outer joins:
SELECT s.first_name, s.last_name, tgs.group_identifier
FROM staff s
JOIN staff_training st
JOIN ON s.staff_id = st.staff_id
LEFT OUTER JOIN training_group_staff tgs
ON st.staff_training_id = tgs.staff_training_id
WHERE st.staff_course_id = '164'