вот моя задача:, что мне не хватает
Создать вид 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)
);
здесь мои 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 возвращает правильную таблицу исключением случаев, когда у человека нет векселей, прошедших duedate, например:
John: accou нт баланс составляет 1000 $, а его счета в прошлом DueDate 400 $, то вид FinancialStatus возвращает правильные результаты, которые являются:
...
4 Doe 346$
5 John 600$
6 Boe 1900$
...
здесь, когда речь идет не так:
Джон: Баланс счета 1000 $ a нет счетов за прошлый год
...
4 Doe 346$
<-here is supposed to be : 5 John 1000$
6 Boe 1900$
...
что мне не хватает ?? :)
Вы уверены, что pid 5 присутствует в долгах, итогах и людях? –
Вам нужно использовать ссылку «Влево». все ваши запросы являются внутренними соединениями. – Andrew