0
這裏是我的任務:缺少什麼我
創建顯示視圖FinancialStatus,爲每個有
賬戶,人的PID和PNAME人,總金額他們
上他們的賬戶減去所有過期到期的未付賬單。
這裏是我的tabels:
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)
);
這裏是我的querys至今:
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視圖返回右表時除外該人沒有過去管理的帳單,例如:
John:accou NT餘額爲$ 1000,而他的賬單過去的交貨期是400 $,則FinancialStatus視圖返回這是正確的結果:
...
4 Doe 346$
5 John 600$
6 Boe 1900$
...
這裏時出錯:
約翰:賬戶餘額爲$ 1000一個沒有票據過去直接付款
...
4 Doe 346$
<-here is supposed to be : 5 John 1000$
6 Boe 1900$
...
我在想什麼? :)
你確定pid 5存在於債務,totalbal和人嗎? – 2014-10-29 19:10:05
您需要使用左外連接。你所有的查詢都是內連接。 – Andrew 2014-10-29 19:11:13