我的数据库中有这些表
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(*)
不能用于空表,那该怎么办?触发器?
答案 0 :(得分:0)
您的一个表为空,但是您正在使用内部联接来联接表。由于finance_orders表为空,因此您要使用null连接记录,因此查询返回0条记录。