1

我正在学习 SQL 并使用 Oracle 11。我正在使用犯罪数据库并试图找到未付费用的犯罪分子。我的查询如下

select first, last, charge_id, (fine_amount + court_fee) as "Total Amount Owed", NVL(amount_paid, null), (fine_amount + court_fee - amount_paid) as "Amount Owed", pay_due_date 
from crime_charges cc, criminals c, crimes
where crimes.crime_id = cc.crime_id and c.criminal_id = crimes.criminal_id and (NVL(fine_amount, 0) + NVL(court_fee, 0)) – NVL(amount_paid, 0 ) > 0;

数据库中的 amount_paid 和 fine_amount 和 court_fee 有空值。我试图过滤掉那些不欠任何atm的罪犯,即(fine_amount + court_fee)-amount_paid> 0

我不断收到一条错误消息,说 ORA-00920:无效的关系运算符 00920。00000 -“无效的关系运算符” *原因:
*操作:行错误:43 列:122

我根本无法让 NVL 在 where 子句中工作。我已经看到使用 NVL 的 where 子句的示例,但我看不出它们与我的查询有何不同。

例子:

SELECT fname, lname, manager_emp_id

FROM employee

WHERE NVL(manager_emp_id, -999) != 7698;
4

2 回答 2

1

首先,我认为在创建数据库时应该避免使用 NULL 方法,因为所有空值都占用了大量空间。在大多数情况下,数据库中有 NULL 是一个糟糕的实现。

NVL(amount_paid, null) 表示以下内容:如果 amount_paid 为“null”,则将其设置为“null”。

我自己对数据库很陌生,但这可能是一个问题,请尝试设置 NVL(amount_paid, 0) 。

否则 NVL 的使用是正确的。

于 2013-03-14T20:11:53.817 回答
1
于 2013-03-14T20:31:11.800 回答