我有一个带有id列的表,它引用同一个表中的一行,表示如果任何值为NULL,则该行应返回的一组默认值。例如:
'content'
id | a | b | default_id
----------------------------------
1 | 33 | 55 | NULL
2 | NULL| 11 | 1
所以我想以一种方式查询第2行,我得到的结果为'a'= 33且'b'= 11.有没有一些简单的方法可以做到这一点?
答案 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