提问者:小点点

在mysql中使用子查询创建视图的问题


我想创建一个名为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

如何走出这个误区?


共1个答案

匿名用户

问题是子查询按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余额