2016-01-12 56 views
0

我有以下查询:Mysql的内部连接 ​​- >如果返回null空,否则返回名字

SELECT 
    projects.id AS project_id, 
    projects.name AS project_name, 
    projects_tasks.id AS task_id, 
    projects_tasks.name AS task_name, 
    projects_tasks_timings.id AS timing_id, 
    projects_tasks_timings.registered_time AS timing_time, 
    projects_tasks_timings.edit_reason AS timing_description, 
    projects_tasks_timings.date AS timing_date, 
    projects_tasks_timings.created_at AS timing_date2, 
    projects_tasks_timings.updated_at AS timing_date3, 
    users.name AS timing_user_name, 
    users.surname AS timing_user_surname, 
    users2.name AS timing_user_name_update, 
    users2.surname AS timing_user_surname_update 
FROM `projects_tasks_timings` 
INNER JOIN `users` 
    ON users.id = projects_tasks_timings.user_id 
INNER JOIN `users` 
    AS users2 ON users2.id = projects_tasks_timings.updated_by 
INNER JOIN `projects_tasks` 
    ON projects_tasks.id = projects_tasks_timings.task_id 
INNER JOIN `projects` 
    ON projects.id = projects_tasks.project_id 
$task_clause 
$user_clause 
LIMIT $limit OFFSET $start 

这将返回大量的数据,但它没有。我认为因为users2上的inner join与任何列都不匹配,因为它们都是null值。

我想实现的是:

如果没有匹配它应该返回null。如果有匹配,它应该返回用户的名字。

我已经通过使用内部连接的where子句来查看一些问题,但迄今为止没有成功。

任何人都可以帮助我吗?谢谢!

回答

2

只需使用LEFT JOIN代替如果INNER JOIN

SELECT 
    projects.id AS project_id, 
    projects.name AS project_name, 
    projects_tasks.id AS task_id, 
    projects_tasks.name AS task_name, 
    projects_tasks_timings.id AS timing_id, 
    projects_tasks_timings.registered_time AS timing_time, 
    projects_tasks_timings.edit_reason AS timing_description, 
    projects_tasks_timings.date AS timing_date, 
    projects_tasks_timings.created_at AS timing_date2, 
    projects_tasks_timings.updated_at AS timing_date3, 
    users.name AS timing_user_name, 
    users.surname AS timing_user_surname, 
    users2.name AS timing_user_name_update, 
    users2.surname AS timing_user_surname_update 
FROM `projects_tasks_timings` 
INNER JOIN `users` 
    ON users.id = projects_tasks_timings.user_id 
INNER JOIN `projects_tasks` 
    ON projects_tasks.id = projects_tasks_timings.task_id 
INNER JOIN `projects` 
    ON projects.id = projects_tasks.project_id 
LEFT JOIN `users` 
    AS users2 ON users2.id = projects_tasks_timings.updated_by 
$task_clause 
$user_clause 
LIMIT $limit OFFSET $start 
+0

感谢,这对我的作品:) –

相关问题