|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
18.08.2009, 08:32 | #1 |
Пользователь
Регистрация: 13.08.2009
Сообщений: 19
|
LEFT JOIN
Есть таблица Т1 с датами за последний месяц и таблица Т2, где те же даты и значения для них, но некоторые даты пропущены. Как мне с помощью функции LEFT JOIN сделать чтобы запрос выдавал ВСЕ даты за последний месяц и значения для них? Для тех дат, которых нет в Т2, должен выдавать ноль.
|
18.08.2009, 09:01 | #2 |
Участник клуба
Регистрация: 15.05.2009
Сообщений: 1,222
|
select t1.data,znach
from t1 left join t2 on t1.data (//тут должно быть ключевое поле)=t2.data(//внешний ключ) where t1.date>=первый день этого месяца в формате дд.мм.гггг А СУБД какая?
Единственное, что ограничивает полет мысли программиста-компилятор
Последний раз редактировалось Sparky; 18.08.2009 в 09:03. |
18.08.2009, 09:26 | #3 |
Пользователь
Регистрация: 13.08.2009
Сообщений: 19
|
Не получается. Вот текст моего запроса:
select T1.date, IFNULL(T2.value, 0) from T1 left join T2 ON T1.date=date(T2.datetime) //там в формате datetime where T1.date>='2009-07-31' and T2.server_name='sg' and Т2.datatype='rate'; //это доп-е условия и выдает только те даты, которые есть в Т2 П.С.: У меня MySQL |
18.08.2009, 12:53 | #4 |
SQL-коддинг
Участник клуба
Регистрация: 16.01.2009
Сообщений: 1,192
|
может тебе нужно
left outer join ?! |
18.08.2009, 13:48 | #5 |
Пользователь
Регистрация: 13.08.2009
Сообщений: 19
|
Может быть. А в чем разница?
|
18.08.2009, 14:35 | #6 |
SQL-коддинг
Участник клуба
Регистрация: 16.01.2009
Сообщений: 1,192
|
здесь пишут, что outer по умолчанию имеется в виду (для меня понятнее когда оно явно указано)
смоделировал твой случай и твой запрос - нормально все возвращает думаю, что у тебя проблема в сравнении дат - их нужно привести к одному формату |
18.08.2009, 15:55 | #7 |
Пользователь
Регистрация: 13.08.2009
Сообщений: 19
|
вроде получилось, только как сделать чтобы значения выдавались только те, для которых выполняется нужное мне условие? я писал и в "where" и в "ON". в "where" выдает Empty Set, в "ON" - все значения выдает нулевые.
Вот мой запрос: select T1.datetime, IFNULL(avg(T2.value), 0) from T1 left outer join T2 ON T2.datetime=T1.datetime group by T1.datetime; |
18.08.2009, 16:05 | #8 |
SQL-коддинг
Участник клуба
Регистрация: 16.01.2009
Сообщений: 1,192
|
согласись, так выглядит читабельнее (обрати внимание на изменения в положении функи IFNULL)
Код:
и эттаа... для читабельности принято и условие объединения писать в том же порядке что и таблицы |
18.08.2009, 16:17 | #9 |
Пользователь
Регистрация: 13.08.2009
Сообщений: 19
|
За советы спасибо, но все же, куда писать доп. условие?
|
18.08.2009, 16:49 | #10 |
SQL-коддинг
Участник клуба
Регистрация: 16.01.2009
Сообщений: 1,192
|
какое?
ты про это? Код:
может задать сразу все вопросы?! |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
INNER JOIN в Delphi не работает. | Droid | БД в Delphi | 2 | 03.07.2009 12:30 |
join в sql | tsergey | Помощь студентам | 1 | 12.02.2009 13:10 |
join | wall66 | SQL, базы данных | 2 | 10.11.2008 16:44 |
Ошибка Left Side cannot be assigned to.. | DM_bite | Помощь студентам | 1 | 18.09.2008 21:01 |
не получается запрос с inner join :mad: | Только_Учусь | SQL, базы данных | 16 | 21.07.2008 09:40 |