Mysql 从左表和完全联接右表中选择值

Mysql 从左表和完全联接右表中选择值,mysql,join,Mysql,Join,这有点难以解释,但我会尽最大努力: 比如说,我有表A: event | task | ref_person ------+------+----------- 1 | 20 | 1 2 | 9 | 2 我有表B(包含person): MySQL查询是什么样子的,它生成这样的表: event | task | person ------+------+------- 1 | 20 | foo 1 | NULL | ba

这有点难以解释,但我会尽最大努力:

比如说,我有表A:

event | task | ref_person
------+------+-----------
  1   |  20  |     1
  2   |   9  |     2
我有表B(包含
person
):

MySQL查询是什么样子的,它生成这样的表:

 event | task | person
 ------+------+-------
   1   |  20  |   foo
   1   | NULL |   bar
   1   | NULL |   jim
   2   | NULL |   foo
   2   |   9  |   bar
   2   | NULL |   jim
我当前的方法是使用
右连接
,但这不会使事件与空值结合

这就是我当前的陈述:

SELECT
    a.*,
    b.name

FROM
    a

RIGHT JOIN b
    ON b.id = a.ref_person

ORDER BY 
    a.event,
    b.name
通知
sqlfiddle似乎已关闭,我将在它再次打开时添加一个

您要执行
交叉连接
以获取所有行,然后执行
案例
逻辑以获取任务:

select a.event,
       (case when a.ref_person = b.id then a.task end) as task,
       b.name
from tablea a cross join
     tableb b ;

如果你喜欢,考虑下面简单的两步行动:1。如果您还没有这样做,请提供适当的DDL(和/或SQLFIDLE),以便我们可以更轻松地复制问题。2.如果尚未这样做,请提供与步骤1中提供的信息相对应的所需结果集。
select a.event,
       (case when a.ref_person = b.id then a.task end) as task,
       b.name
from tablea a cross join
     tableb b ;