Mysql: Как заполнить нулевые значения в одной строке значениями из другой строки в той же таблице? - PullRequest
2 голосов
/ 09 января 2011

У меня есть таблица со столбцом id, который ссылается на строку из той же таблицы, которая представляет набор значений по умолчанию, которые должна возвращать строка, если какое-либо из значений равно NULL. Например:

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

Итак, я хочу запросить строку 2 таким образом, чтобы получить результат с 'a' = 33 и 'b' = 11. Есть ли какой-нибудь простой способ сделать это?

Ответы [ 3 ]

3 голосов
/ 09 января 2011

Вы можете использовать функцию COALESCE(), которая возвращает первое ненулевое значение в списке:

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)
2 голосов
/ 09 января 2011
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;
0 голосов
/ 09 января 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...