2015-10-18 4 views
0

я следующие пять таблиц:нескольких объединений на основе четырех таблиц

users(user_id(pk),username) 
year_month(id(pk),year_id(FK),month_id(FK)) 
monthly_payment(id(pk), username, amount, year_month_id(fk),user_id(fk)) 
years(year_id(pk),year) 
month(month_id(pk),month_name) 

Я 4 зарегистрированных пользователей в users таблице, 3-х лет в year_month таблице и некоторые записи в monthly_payment таблицы (которые хранят сумму каждый пользователь заплатил ежемесячно).

Я пробовал много, чтобы сделать запрос, получить все года с месяцами для каждого пользователя, и показать для каждого пользователя, если amount поля в таблице monthly_payment устанавливаются с номером или он по-прежнему пуст.

это запрос я сделал:

select ym.id, ym.year_id,y.year, m.month_name, ym.month_id, mp.amount, u.user_id, u.username, u.`first_name`, u.`last_name` 
from `users` as u 
left join monthly_payment as mp using(user_id) 
right join `year_month` as ym on(ym.id = mp.`year_month_id`) 
inner join `years` as y on(y.year_id = ym.year_id) 
inner join `month` as m on(m.month_id = ym.month_id) 
where mp.year_month_id is null or mp.year_month_id is not null 

будет, результат отличается, чем я думал. это просто покажет мне годы только один раз.

Может ли кто-нибудь вести меня, как это сделать правильно? !! и спасибо,

+0

Можете ли вы подготовить образец данных [SQLFiddle] (http://sqlfiddle.com)? –

+0

Возможно, избавиться от таблицы лет, таблицы месяцев и таблицы year_month. – Strawberry

+0

@Strawberry, я пытался это сделать, все еще не работал. Спасибо! – bakursait

ответ

0

Начните с вашей таблицы year_month и оставите все остальные таблицы. Как только вы используете обычное внутреннее соединение, у вас будет возможность подавить некоторые значения даты без соответствующих элементов.

+0

Прежде всего, спасибо вам за помощь. , но это дает мне ошибку, просто вы можете мне сказать, правильно или нет порядок (объединения столов вместе) ?: 'select ym. *, Mp. *, U.user_id, u.username, y.year, m.month_name из year_month в ут покинул присоединиться monthly_payment как тр на (ym.id = mp.year_month_id) оставили присоединиться пользователей в виде и на (u.user_id = mp.user_id) влево присоединиться месяц, как м on (m.month_id = ym.month_id) left join years as y on (y.year_id = ym.year_id) где mp.year_month_id имеет значение null или mp.year_month_id не равно null. – bakursait