这有点难以解释,但我会尽我所能:
让我们说,我有表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似乎失败了,我会在它再次加起来时添加一个
答案 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 ;