返回0作为不存在的行的值

时间:2013-05-29 09:47:57

标签: sql oracle plsql oracle11g plsqldeveloper

我有两张桌子。

表1:

-------------------------------
| product_id | product number |
-------------------------------
|    1001    |   67E432D      |
|    1002    |   888CDE32     | 
|    1003    |   54D32EC2     |
-------------------------------

表2:

--------------------------
| product_id |   desc    |
--------------------------
|  1001      | product 1 |
|  1003      | peoduct 3 |
--------------------------

在加入表1和表2后,我得到以下结果。

-------------------------------------------
| product_id | product number |   desc    |
-------------------------------------------
|    1001    |   67E432D      | product 1 |
|    1002    |   888CDE32     |           |
|    1003    |   54D32EC2     | product 3 |
-------------------------------------------

现在你可以看到产品3的'desc'列现在是空的。我怎么可能在该列中有0?类似的东西:

-------------------------------------------
| product_id | product number |   desc    |
-------------------------------------------
|    1001    |   67E432D      | product 1 |
|    1002    |   888CDE32     |     0     |
|    1003    |   54D32EC2     | product 3 |
-------------------------------------------

可能有一些功能可以完成这项工作,但我想我不知道它..但是。

2 个答案:

答案 0 :(得分:4)

听起来你只想使用NVL

SELECT product_id, product_number, NVL( desc, '0' )
  FROM table_1
       LEFT OUTER JOIN table_2 USING (product_id)
ORDER BY product_id

SQLFiddle Demo

答案 1 :(得分:1)

由于此问题标有 Oracle ,Justin的回答很好。

如果您关心可移植性,请考虑使用 coalesce :基于Justin的回答:

SELECT product_id, product_number, coalesce( desc, '0' )
  FROM table_1
       LEFT OUTER JOIN table_2 USING (product_id)
ORDER BY product_id

至于差异,请查看here