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

时间:2015-03-10 15:30:05

标签: mysql join

这有点难以解释,但我会尽我所能:

让我们说,我有表A:

event | task | ref_person
------+------+-----------
  1   |  20  |     1
  2   |   9  |     2

我有表B(包含person):

id | name
---+-----
 1 | foo
 2 | bar
 3 | jim

MySQL查询的外观是什么,它产生了这种表:

 event | task | person
 ------+------+-------
   1   |  20  |   foo
   1   | NULL |   bar
   1   | NULL |   jim
   2   | NULL |   foo
   2   |   9  |   bar
   2   | NULL |   jim

我目前的方法是使用RIGHT JOIN,但这不会让我将事件与NULL值结合起来。

这就是我目前的陈述:

SELECT
    a.*,
    b.name

FROM
    a

RIGHT JOIN b
    ON b.id = a.ref_person

ORDER BY 
    a.event,
    b.name

注意

sqlfiddle似乎失败了,我会在它再次加起来时添加一个

1 个答案:

答案 0 :(得分:2)

您想要cross join获取所有行,然后case逻辑来获取任务:

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 ;