Один-ко-многим запрос в MySQL - PullRequest
       9

Один-ко-многим запрос в MySQL

3 голосов
/ 10 августа 2010

Какой лучший способ сделать запрос один-ко-многим в 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)  
);  

(Причина, по которой в таблице Rent есть месяц и date_paid, заключается в том, что арендаторне обязательно платить арендную плату все сразу).То, что я хочу, чтобы имя арендатора появилось один раз, и это будет просто левое соединение, но я хочу, чтобы вся сумма, выплаченная за определенный месяц, была указана в столбцах для каждого арендатора, я не уверен, как это сделать.Я не совсем уверен, как это сделать, так как вы имеете дело с неизвестным количеством столбцов, еще не коснулись этого в MySQL.Или есть лучшая стратегия?Кроме того, как бы я мог создать свою собственную переменную, такую ​​как MONTH-YEAR (я не думаю, что она существует как собственная переменная в MySQL).Спасибо!

Редактировать: просто чтобы еще больше упростить его, я использую этот формат:
<br> create table rent(<br> tenant_id int not null,<br> year year,<br> amount_paid int,<br> foreign key (tenant_id) references tenant(tenant_id)<br> );<br>

Если я понимаю, что сказал duffymo ниже, я должен использовать group by (я знаю, что где-то неправильно понимаюпотому что он показывает только первый пример для каждого года): <br> SELECT Tenant.first_name, Rent.year, Rent.amount_paid<br> FROM Tenant<br> LEFT JOIN Rent<br> ON Tenant.tenant_id = Rent.tenant_id<br> GROUP BY year;<br>

Вот как я хочу, чтобы запрос выглядел, число под каждым годом - это выплаченная сумма (на самом деле я только что понял, что это немногоболее сложный, чем то, что я объяснил):

имя_сервера 2009 2008 2007
Джон 500 500 NULL
Ann 1000 NULL NULL
Боб NULL 700 700

1 Ответ

0 голосов
/ 10 августа 2010

Если у вас есть столбцы MONTH и YEAR, вы можете выполнить GROUP BY, чтобы выбрать уплаченную сумму по вашему желанию.Если у вас есть столбец PAID_DATE, один из способов сделать это - использовать триггер BEFORE INSERT, который запускается, когда установлен PAID_DATE.Таким образом, пользователям не нужно вводить значения, и целостность данных может быть гарантирована.

...