如果未找到行,则显示列的null

时间:2012-05-08 14:44:06

标签: mysql sql

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

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

3 个答案:

答案 0 :(得分:2)

尝试使用LEFT JOIN。应该是你想要的。

答案 1 :(得分:1)

两件事:

  1. 加入LEFT JOIN
  2. 时,请尝试使用明确的training_group_staff
  3. IF语句检查该值是否为空并将其设置为null
  4. 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'