0

我目前有以下 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_idtraining_group_id

此语句按预期工作,并返回参加课程 164 的所有工作人员姓名,并已被放入一个组(用该group_identifier字段标识)。

我试图做的是在培训课程 164 上显示所有用户,如果没有选择任何组(特定staff_training_idin不会有一行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

我尝试了几个连接,但似乎返回相同的结果 - 一个查询中是否可能有所需的输出?

4

3 回答 3

2

尝试使用LEFT JOIN. 应该是你所追求的。

于 2012-05-08T14:46:58.263 回答
1

两件事情:

  1. LEFT JOIN加入training_group_staff表时尝试使用显式
  2. 一个 IF 语句检查值是否为空并将其设置为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'
于 2012-05-08T14:46:58.357 回答
1

当您想要包含以下操作时,请使用外连接:NULLJOIN

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'
于 2012-05-08T14:47:29.383 回答