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

时间:2011-01-08 23:52:05

标签: mysql sql

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

'content'
id | a   | b   | default_id
----------------------------------
1  | 33  | 55  | NULL
2  | NULL| 11  | 1

所以我想以一种方式查询第2行,我得到的结果为'a'= 33且'b'= 11.有没有一些简单的方法可以做到这一点?

3 个答案:

答案 0 :(得分:3)

您可能想要使用COALESCE()函数,whick返回列表中的第一个非NULL值:

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)

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;

答案 2 :(得分:0)

SELECT t1.id, IFNULL(t1.a, t2.a), IFNULL(t1.b,t2.b)
FROM content t1
LEFT JOIN content t2 ON (t2.id = t1.default_id)
WHERE t1.id = 2