Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Central de ajuda/ GaussDB(DWS)/ Perguntas frequentes/ Uso do banco de dados/ Como substituir o resultado nulo por 0?
Atualizado em 2024-05-09 GMT+08:00

Como substituir o resultado nulo por 0?

Quando OUTER JOIN (LEFT JOIN, RIGHT JOIN e FULL JOIN) é executada, a falha de correspondência na outer join gera um grande número de valores NULL. Você pode substituir esses valores nulos por 0.

Você pode usar a função COALESCE para fazer isso. Esta função retorna o primeiro valor de parâmetro não nulo na lista de parâmetros. Por exemplo:

1
2
3
4
5
SELECT coalesce(NULL,'hello');
 coalesce
----------
 hello
(1 row)

Use left join para ingressar nas tabelas course1 e course2.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
SELECT * FROM course1;
  stu_id  |  stu_name  |     cour_name
----------+------------+--------------------
 20110103 | ALLEN      | Math
 20110102 | JACK       | Programming Design
 20110101 | MAX        | Science
(3 rows)

SELECT * FROM course2;
 cour_id |     cour_name      | teacher_name
---------+--------------------+--------------
    1002 | Programming Design | Mark
    1001 | Science            | Anne
(2 rows)

SELECT course1.stu_name,course2.cour_id,course2.cour_name,course2.teacher_name FROM course1 LEFT JOIN course2 ON course1.cour_name = course2.cour_name ORDER BY 1;
  stu_name  | cour_id |     cour_name      | teacher_name
------------+---------+--------------------+--------------
 ALLEN      |         |                    |
 JACK       |    1002 | Programming Design | Mark
 MAX        |    1001 | Science            | Anne
(3 rows)

Use a função COALESCE para substituir valores nulos no resultado da consulta por 0 ou outros valores diferentes de zero:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
SELECT course1.stu_name,
 coalesce(course2.cour_id,0) AS cour_id,
 coalesce(course2.cour_name,'NA') AS cour_name,
 coalesce(course2.teacher_name,'NA') AS teacher_name
 FROM course1
 LEFT JOIN course2 ON course1.cour_name = course2.cour_name
 ORDER BY 1;
  stu_name  | cour_id |     cour_name      | teacher_name
------------+---------+--------------------+--------------
 ALLEN      |       0 | NA                 | NA
 JACK       |    1002 | Programming Design | Mark
 MAX        |    1001 | Science            | Anne
(3 rows)