【问题标题】:Problem in creating view in mysql by subqueries通过子查询在mysql中创建视图的问题
【发布时间】:2021-05-01 12:16:36
【问题描述】:

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

如何摆脱这个错误?

【问题讨论】:

  • 您的子查询有一个GROUP BY CUST_ID,这意味着MAX 没有聚合。删除GROUP BY,它将返回数据。
  • edit您的问题向我们展示您的表定义,并解释您的子查询的目的。

标签: mysql view subquery


【解决方案1】:

问题是子查询按 cust_id 分组,因此返回每个 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 余额

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-23
    • 2012-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-31
    • 1970-01-01
    相关资源
    最近更新 更多