我想创建一个名为indiversal_info
的视图,该视图显示个人的所有信息,除了他们的客户ID之外,还列出每个人在他/她的帐户中有多少余额。
我的疑问是:
Create VIEW individual_info AS
Select FIRST_NAME, LAST_NAME, BIRTH_DATE, (Select MAX(AVAIL_BALANCE)
AS Total_Balance
FROM ACCOUNT
where CUST_ID < 10
GROUP BY CUST_ID) from INDIVIDUAL;
现在,这个查询将创建视图,但当我想通过以下命令查看该视图中的信息时:
select * from individual_info;
它将返回一个错误:
ERROR 1242 (21000): Subquery returns more than 1 row
如何走出这个误区?
问题是子查询按cust_id分组,因此返回每个cust_id<10(?)的最大值。您需要的是一个相关查询,我假设表INTIVERATION中有一个cust_id,因此您的视图应该是这样的:
Create VIEW individual_info AS
Select FIRST_NAME, LAST_NAME, BIRTH_DATE, (Select AVAIL_BALANCE
AS Total_Balance
FROM ACCOUNT as a
where a.CUST_ID = i.cust_id)
from INDIVIDUAL as i
注意:您也可以使用连接而不是相关查询(这将是我的首选):
CREATE VIEW individual_info AS
SELECT FIRST_NAME, LAST_NAME, BIRTH_DATE, coalesce(AVAIL_BALANCE,0)
AS Total_Balance
FROM INDIVIDUAL i
LEFT JOIN ACCOUNT a
ON a.CUST_ID = i.cust_id
我包括合并的情况下,没有帐户记录的一些个人,如果是这样的话,这些将显示为0余额