Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql:如何用同一表中另一行的值填充一行中的空值?_Mysql_Sql - Fatal编程技术网

Mysql:如何用同一表中另一行的值填充一行中的空值?

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(

我有一个带有id列的表,该列引用了同一个表中的一行,该行表示一组默认值,如果其中任何值为NULL,则该行应返回这些默认值。例如:

'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
。谢谢!正是我想要的。