![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы
![]() |
Поиск в этой теме
![]() |
![]() |
#1 |
Пользователь
Регистрация: 13.08.2009
Сообщений: 19
|
![]()
Есть таблица Т1 с датами за последний месяц и таблица Т2, где те же даты и значения для них, но некоторые даты пропущены. Как мне с помощью функции LEFT JOIN сделать чтобы запрос выдавал ВСЕ даты за последний месяц и значения для них? Для тех дат, которых нет в Т2, должен выдавать ноль.
|
![]() |
![]() |
![]() |
#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. |
![]() |
![]() |
![]() |
#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 |
![]() |
![]() |
![]() |
#4 |
SQL-коддинг
Участник клуба
Регистрация: 16.01.2009
Сообщений: 1,192
|
![]()
может тебе нужно
left outer join ?! |
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 13.08.2009
Сообщений: 19
|
![]()
Может быть. А в чем разница?
|
![]() |
![]() |
![]() |
#6 |
SQL-коддинг
Участник клуба
Регистрация: 16.01.2009
Сообщений: 1,192
|
![]()
здесь пишут, что outer по умолчанию имеется в виду (для меня понятнее когда оно явно указано)
смоделировал твой случай и твой запрос - нормально все возвращает думаю, что у тебя проблема в сравнении дат - их нужно привести к одному формату |
![]() |
![]() |
![]() |
#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; |
![]() |
![]() |
![]() |
#8 |
SQL-коддинг
Участник клуба
Регистрация: 16.01.2009
Сообщений: 1,192
|
![]()
согласись, так выглядит читабельнее (обрати внимание на изменения в положении функи IFNULL)
Код:
и эттаа... для читабельности принято и условие объединения писать в том же порядке что и таблицы |
![]() |
![]() |
![]() |
#9 |
Пользователь
Регистрация: 13.08.2009
Сообщений: 19
|
![]()
За советы спасибо, но все же, куда писать доп. условие?
|
![]() |
![]() |
![]() |
#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 |