尽管我的&input是正确的,但Count(*)不会返回“ 1”?

时间:2018-12-12 19:19:16

标签: sql oracle

我的数据库中有这些表

SQL> desc finance_orders;
 Name                                      Null?    Type
 ----------------------------------------- -------- --------------
 ORDER_NUM                                 NOT NULL VARCHAR2(10)
 CLIENT_ID                                          NUMBER(8)
 FINANCE_NAME                                       VARCHAR2(32)
 FINANCE_AMMOUNT                                    NUMBER(10)
 IN_HMY                                             NUMBER(3)
 ORDER_DATE                                         DATE
 ORDER_STATUS                                       VARCHAR2(32)

SQL> desc finance_types;
 Name                                      Null?    Type
 ----------------------------------------- -------- --------------
 FIN_NAME                                  NOT NULL VARCHAR2(32)
 FIN_MIN                                            NUMBER(10)
 FIN_MAX                                            NUMBER(10)
 FIN_APR                                            NUMBER(5,2)
 MGMT_COST                                          NUMBER(10)
 DOUBLE_SAL                                         NUMBER(5)

SQL> desc client_accounts;
 Name                                      Null?    Type
 ----------------------------------------- -------- --------------
 CLIENT_ID                                          NUMBER(8)
 CARD_NUM                                  NOT NULL NUMBER(13)
 CVC                                                NUMBER(3)
 ISS_DATE                                           DATE
 EXP_DATE                                           DATE
 SAL                                                NUMBER(10)
 BALANCE                                            NUMBER(10)

已经填充了两个表,第三个是空的。

SQL> SELECT * FROM CLIENT_ACCOUNTS;

 CLIENT_ID   CARD_NUM        CVC ISS_DATE  EXP_DATE         SAL    BALANCE
---------- ---------- ---------- --------- --------- ---------- ----------
  10000000 6.6028E+12        113 12-DEC-18 11-DEC-21      15000
  10001500 6.4924E+12        461 12-DEC-18 11-DEC-21      15000

SQL> SELECT * FROM FINANCE_TYPES;

FIN_NAME                            FIN_MIN    FIN_MAX    FIN_APR  MGMT_COST DOUBLE_SAL
-------------------------------- ---------- ---------- ---------- ---------- ----------
CAR                                   45000     500000       4.85       2500         25
HOME                                 120000  250000000       12.7       8500         60
PERSONAL                               2000     180000       3.58        500         15

因此,我主要使用count(*)进行查询,然后将值插入finance_orders表中。只是检查,不添加。

这是代码:

  1 SELECT Count(*)
  2 FROM CLIENT_ACCOUNTS CA , FINANCE_TYPES FT ,FINANCE_ORDERS FO
  3 WHERE
  4 FO.CLIENT_ID= &CLIENT_ID --here i use this to check
  5 AND
  6 FO.FINANCE_NAME = '&FIN_NAME' --here i use this to check
  7 AND
  8 FO.CLIENT_ID = CA.CLIENT_ID
  9 AND
 10 FO.FINANCE_NAME = FT.FIN_NAME
 11 AND
 12 ((((CA.SAL)*(FT.DOUBLE_SAL)) BETWEEN FT.FIN_MIN AND FT.FIN_MAX) OR (((CA.SAL)*(FT.DOUBLE_SAL)) > FT.FIN_MAX) )

SQL> /
Enter value for client_id: 10000000
old   4:                  FO.CLIENT_ID= &CLIENT_ID
new   4:                  FO.CLIENT_ID= 10000000
Enter value for fin_name: PERSONAL
old   6:                                          FO.FINANCE_NAME = '&FIN_NAME'
new   6:                                          FO.FINANCE_NAME = 'PERSONAL'

  COUNT(*)
----------
         0 

我使用“&input”作为一种检查方式,对不起,count(*)将无法退还“ 1”。

您会看到客户“ 10000000”的薪水“ 15000 $”以及他的财务类型“最小”和“最大”以及“ double_sal”都满足且为真,因此count(*)必须为1。

表为空。如果count(*)不能用于空表,那该怎么办?触发器?

1 个答案:

答案 0 :(得分:0)

您的一个表为空,但是您正在使用内部联接来联接表。由于finance_orders表为空,因此您要使用null连接记录,因此查询返回0条记录。