Mysql:如何用同一表中另一行的值填充一行中的空值?
我有一个带有id列的表,该列引用了同一个表中的一行,该行表示一组默认值,如果其中任何值为NULL,则该行应返回这些默认值。例如:Mysql:如何用同一表中另一行的值填充一行中的空值?,mysql,sql,Mysql,Sql,我有一个带有id列的表,该列引用了同一个表中的一行,该行表示一组默认值,如果其中任何值为NULL,则该行应返回这些默认值。例如: 'content' id | a | b | default_id ---------------------------------- 1 | 33 | 55 | NULL 2 | NULL| 11 | 1 因此,我想以一种方式查询第2行,即返回一个“a”=33和“b”=11的结果。有什么简单的方法可以做到这一点吗 选择t1.id、IFNULL(
'content'
id | a | b | default_id
----------------------------------
1 | 33 | 55 | NULL
2 | NULL| 11 | 1
因此,我想以一种方式查询第2行,即返回一个“a”=33和“b”=11的结果。有什么简单的方法可以做到这一点吗 选择t1.id、IFNULL(t1.a,t2.a)、IFNULL(t1.b,t2.b)
select t1.id
,coalesce(t1.a, t2.a) as a
,coalesce(t1.b, t2.b) as b
from content t1
left outer
join content t2 on(t1.default_id = t2.id)
where t1.id = 2;
从内容t1
左连接内容t2打开(t2.id=t1.default\u id)
其中t1.id=2
您可能需要使用该函数,该函数返回列表中的第一个非空值:
SELECT COALESCE(c1.a, c2.a) a ,
COALESCE(c1.b, c2.b) b
FROM content c1
LEFT JOIN content c2 ON (c2.id = c1.default_id)
WHERE c1.id = 2;
测试用例:
CREATE TABLE content (id int, a int, b int, default_id int);
INSERT INTO content VALUES (1, 33, 55, NULL);
INSERT INTO content VALUES (2, NULL, 11, 1);
结果:
+------+------+
| a | b |
+------+------+
| 33 | 11 |
+------+------+
1 row in set (0.00 sec)
第1行和第2行之间的关系是什么?这是针对有限数量的列,还是您正在寻找n列的通用解决方案?Ronnis:第2行的“默认\u id”为1,因此我希望第2行中的空列用第1行中的值填充。每行都有不同的“默认\u id”,并且可能返回许多记录,每个列都需要填入各自的默认值。Brett:n列的通用解决方案,是的。虽然我是以编程方式生成查询的,但是如果我必须将一些列名合并在一起,只要它对所有列名都有效,我就可以一次完成所有查询。合并条件应该是
c2.id=c1。默认值\u id
。谢谢!正是我想要的。