在MySQL中查詢一對多的最佳方式是什麼?這是我的工作(如果有的話看起來不正確的告訴我)數據庫的一個簡化版本:MySQL中的一對多查詢
CREATE TABLE Tenant(
tenant_id int NOT NULL,
first_name varchar(20),
last_name varchar(20),
PRIMARY KEY (tenant_id)
);
CREATE TABLE Rent(
tenant_id int NOT NULL,
month enum('JAN', 'FEB', ...),
date_paid date NOT NULL,
amount_paid int NOT NULL,
FOREIGN KEY (tenant_id) REFERENCES Tenant(tenant_id)
);
(原因有一個月,date_paid在租金錶,因爲承租人不必須一次支付全部租金)。我想讓租戶的名字出現一次,這只是一個左連接,但我希望每個租戶都將特定月份中支付的所有金額列爲列,但我不確定如何去解決這個問題。我不確定如何做到這一點,因爲你正在處理未知數量的列,在MySQL中還沒有涉及到。還是有更好的策略?另外,我將如何去創建像MONTH-YEAR這樣的自己的變量(我不認爲它是MySQL中的本地變量)。謝謝!
編輯: 只是爲了簡化進一步我使用這種格式:
create table rent(
tenant_id int not null,
year year,
amount_paid int,
foreign key (tenant_id) references tenant(tenant_id)
);
如果我沒有理解什麼duffymo說,下面我應該用組(我知道我誤解的地方,因爲它只能顯示第一每年的例子):
SELECT Tenant.first_name, Rent.year, Rent.amount_paid
FROM Tenant
LEFT JOIN Rent
ON Tenant.tenant_id = Rent.tenant_id
GROUP BY year;
這就是我想要查詢的樣子,每年下的數字是支付的數額(我實際上剛剛意識到它比我如何解釋有點複雜一點):
FIRST_NAME 2009 2008 2007
約翰500 500 NULL
安1000 NULL NULL
鮑勃NULL 700 700
好吧,這聽起來像一個好主意,但我不知道如何處理可變數量的列。 – MCH 2010-08-10 02:15:07
表中的列數不變;這是一個一對多的關係。在您編寫的查詢中會得到可變數量的結果。 – duffymo 2010-08-10 09:23:25
是的,你是對的。這就是我的意思,在結果查詢中。我編輯了我原來的帖子,因爲我仍然有點麻煩。 – MCH 2010-08-10 16:20:04