如果为null,MySQL将连接填充前一个值

时间:2016-02-23 13:45:48

标签: mysql left-join

假设我有两张桌子

表A:

ID - Value1
===========
1  - A
2  - B
3  - C
4  - D

表B:

ID - Value2
===========
1  - AA
3  - NULL
4  - DD

这些表的正常连接可以是:
选择 * 来自TableA TA LEFT JOIN TableB TB ON TA.ID = TB.ID

结果将是:

ID - Value1 - Value2
======================
1  - A - AA
2  - B - NULL
3  - C - NULL
4  - D - DD

但是,在我的情况下,我想用前一行的值填充NULL值(实际上缺少值)并保留实际为NULL的值,如下所示:

ID - Value1 - Value2
======================
1  - A - AA
2  - B - AA
3  - C - NULL
4  - D - DD

有没有办法实现这个目标?

编辑1: 我意识到我错误地提出了我的问题...抱歉让人感到困惑。

实际上,如果连接表的值实际为NULL,我想保留,如果值不存在则填充值。

2 个答案:

答案 0 :(得分:1)

尝试这样的事情 - 内部左连接是获取表b中的每个值,前一个非空值(如果存在)然后将其连接到表a,如果不为null或新值则取值2如果是的话。

SELECT f.id,f.value1,coalesce(p.value2,p.PrevValue2) as value2
FROM TableA f
LEFT OUTER JOIN(SELECT t.ID,t.Value2,
                            (select s.value2 from tableB s
                             where s.value2 is not null and s.id<t.id
                             order by s.id DESC limit 1) as PrevValue2 
                FROM TableB t) p
ON(p.id = f.id)

答案 1 :(得分:1)

key.keyCode

demo on sqlfiddle