mysql - 我错过了什么

标签 mysql sql database

这是我的任务:

创建一个 View FinancialStatus,显示每个拥有
帐户、该人的 PID 和 pName 以及他们拥有的总金额
他们的账户减去所有逾期未付的账单。

这是我的表格:

 CREATE TABLE People (
PID INT, 
pName VARCHAR(50),
pGender CHAR(1),
pHeight FLOAT,
PRIMARY KEY (PID)
);

CREATE TABLE Accounts (
AID INT AUTO_INCREMENT, -- IDENTITY for MS-SQL
PID INT,
aDate DATE,
aBalance INT,
aOver INT,
PRIMARY KEY (AID),
FOREIGN KEY (PID) REFERENCES People(PID)
);

CREATE TABLE Bills (
BID INT AUTO_INCREMENT, -- IDENTITY for MS-SQL
PID INT,
bDueDate DATE NOT NULL,
bAmount INT,
bIsPaid BIT NOT NULL,
PRIMARY KEY (BID),
FOREIGN KEY (PID) REFERENCES People(PID)
);

这是我迄今为止的查询:

create view debts as
select b.bispaid, p.pid, p.pname, sum(b.bamount) as bamount2
from bills b, people p
where p.pid = b.pid
AND b.bDueDate < curdate()
AND b.bispaid = 0
group by p.pid;

CREATE VIEW totalbal AS
    SELECT P.PID, P.pName, SUM(A.aBalance) as bal
    FROM People P, Accounts A
    WHERE P.PID = A.PID
    GROUP BY P.PID;

create view FinancialStatus as
select p.pid, p.pName, (t.bal - d.bamount2) as remains
from totalbal t, debts d, people p
where p.pid = d.pid
AND p.pid = t.pid;
-- group by p.pid;

select * from   FinancialStatus;

这是错误的:

FinancialStatus View 会返回正确的表,除非该人没有过期的账单,例如:

John:帐户余额为 1000 美元,他的逾期账单为 400 美元,那么 FinancialStatus View 将返回正确的结果:

...
4   Doe    346$
5   John    600$
6   Boe     1900$
...

这里是出错的时候:

约翰:账户余额为 1000 美元,没有逾期账单

 ...
    4   Doe    346$
                        <-here is supposed to be : 5    John    1000$
    6   Boe    1900$
    ...

我错过了什么? :)

最佳答案

我认为您必须执行左连接,因为 debts View 没有 John 的记录。

create view FinancialStatus as
select p.pid, p.pName, (t.bal - IFNULL(d.bamount2, 0)) as remains
from totalbal t
inner join people p on p.pid = t.pid
left join debts d on p.pid = d.pid

请注意,我没有使用 MySql 的经验,因此我不确定语法是否 100% 准确。

关于mysql - 我错过了什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26638575/

相关文章:

php - 计算不同表的平均值

sql - 使用 SQL Server POWER 函数将负基数提高到十进制幂

database - 显示主 : foreign key relationships in Visio database diagram

mysql - 条件为 If (Update OR Insert) 的 SQL 查询?

mysql - 在实时站点上通过Golang连接到Cloud SQL(MySQL)

c# - 如何在c#中将DataGridView多行数据保存到MySQL数据库

mysql - WordPress中的数据迁移导致域错误

mysql - MySQL中列的条件选择

mysql - sql 语句不起作用并出现错误

sql - 手动填充 Azure 数据库