Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / LEFT JOIN + WHERE не дружит с derived таблицами / 7 сообщений из 7, страница 1 из 1
05.02.2016, 01:50
    #39163427
_Промешан_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LEFT JOIN + WHERE не дружит с derived таблицами
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
  SET @dt = (select CONCAT(2016, '-', 02, '-', '01'));
  SET @mx = DAYOFMONTH(DATE_SUB(DATE_ADD(@dt, INTERVAL 1 MONTH), INTERVAL 1 DAY));
  
  select * FROM (
         SELECT DATE_ADD(@dt, INTERVAL Days DAY) D, weekday(DATE_ADD(@dt, INTERVAL Days DAY)) + 1 month_weekdays
         FROM (select @d:=0 as Days
               union
               select @d:=@d+1 as Days from 
                  (SELECT 1 a UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 
                    UNION SELECT 10 UNION SELECT 11 UNION SELECT 12 UNION SELECT 13 UNION SELECT 14 UNION SELECT 15 UNION SELECT 16 UNION SELECT 17
                    UNION SELECT 18 UNION SELECT 19 UNION SELECT 20 UNION SELECT 21 UNION SELECT 22 UNION SELECT 23 UNION SELECT 24 UNION SELECT 25
                    UNION SELECT 26 UNION SELECT 27 UNION SELECT 28 UNION SELECT 29 UNION SELECT 30 UNION SELECT 31
                  ) t
               limit 0, 31
              ) v 
         WHERE DATE_ADD(@dt, INTERVAL Days DAY) < DATE_ADD(@dt, INTERVAL 1 MONTH)
    ) mon
    LEFT JOIN rs_sched r ON r.dtDate = mon.D
    WHERE r.centerid = 0


Смысл derived таблицы "v" - список дней-дат для выбранного месяца и года (если есть более элегатное решение без UNION и без временных-постоянных таблиц - welcome please).

Стоит убрать WHERE - все появляется как надо - то есть все 29 дней февраля с некоторыми записями из rs_sched.
Как только добавляю WHERE, ограничивающий записи из rs_sched - получаю только две записи, которые есть в rs_sched.

И что это за LEFT JOIN такой и что с этим делать?

PS: версия 5.5.44-37.3-log
...
Рейтинг: 0 / 0
05.02.2016, 02:02
    #39163430
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LEFT JOIN + WHERE не дружит с derived таблицами
_Промешан_
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
(select @d:=0 as Days
               union
               select @d:=@d+1 as Days from 
                  (SELECT 1 a UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 
                    UNION SELECT 10 UNION SELECT 11 UNION SELECT 12 UNION SELECT 13 UNION SELECT 14 UNION SELECT 15 UNION SELECT 16 UNION SELECT 17
                    UNION SELECT 18 UNION SELECT 19 UNION SELECT 20 UNION SELECT 21 UNION SELECT 22 UNION SELECT 23 UNION SELECT 24 UNION SELECT 25
                    UNION SELECT 26 UNION SELECT 27 UNION SELECT 28 UNION SELECT 29 UNION SELECT 30 UNION SELECT 31
                  ) t
               limit 0, 31
              )

К чему эти навороты?
Почему не так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
(SELECT 0 a UNION ALL
SELECT 1 UNION ALL
SELECT 2 UNION ALL
SELECT 3 UNION ALL
SELECT 4 UNION ALL
SELECT 5 UNION ALL
SELECT 6 UNION ALL
SELECT 7 UNION ALL
SELECT 8 UNION ALL
SELECT 9 UNION ALL
SELECT 10 UNION ALL
SELECT 11 UNION ALL
SELECT 12 UNION ALL
SELECT 13 UNION ALL
SELECT 14 UNION ALL
SELECT 15 UNION ALL
SELECT 16 UNION ALL
SELECT 17 UNION ALL
SELECT 18 UNION ALL
SELECT 19 UNION ALL
SELECT 20 UNION ALL
SELECT 21 UNION ALL
SELECT 22 UNION ALL
SELECT 23 UNION ALL
SELECT 24 UNION ALL
SELECT 25 UNION ALL
SELECT 26 UNION ALL
SELECT 27 UNION ALL
SELECT 28 UNION ALL
SELECT 29 UNION ALL
SELECT 30)
...
Рейтинг: 0 / 0
05.02.2016, 02:06
    #39163432
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LEFT JOIN + WHERE не дружит с derived таблицами
_Промешан_Стоит убрать WHERE - все появляется как надо - то есть все 29 дней февраля с некоторыми записями из rs_sched.
Как только добавляю WHERE, ограничивающий записи из rs_sched - получаю только две записи, которые есть в rs_sched.

И что это за LEFT JOIN такой и что с этим делать?_Промешан_
Код: sql
1.
WHERE r.centerid = 0

На самом деле это означает вот это:
Код: sql
1.
WHERE r.centerid = 0 AND r.centerid IS NOT NULL

т.к. сравнение NULL с числом дает ложь.

Если вам нужно, чтобы в соединении участвовали только записи с r.centerid = 0, то это условие нужно писать в условие соединения, т.е. в ON.
...
Рейтинг: 0 / 0
05.02.2016, 08:04
    #39163474
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LEFT JOIN + WHERE не дружит с derived таблицами
miksoft,
ну и нет смысла писать что-то в WHERe кроме is null, is not null на таблицу, если с ней делается LEFT JOIN, он автоматом превращается в INNER JOIN.
...
Рейтинг: 0 / 0
05.02.2016, 16:59
    #39164248
_Промешан_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LEFT JOIN + WHERE не дружит с derived таблицами
Хм... действительно.

Почему-то я думал, что это правило будет относиться только к ограничиваемой таблице, а не ко всему результирующему выбору.
Спасибо.
...
Рейтинг: 0 / 0
05.02.2016, 17:29
    #39164302
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LEFT JOIN + WHERE не дружит с derived таблицами
_Промешан_Хм... действительно.

Почему-то я думал, что это правило будет относиться только к ограничиваемой таблице, а не ко всему результирующему выбору.
Спасибо.

К ограничиваемой таблице оно будет относится только внутри фразы ... JOIN ON
...
Рейтинг: 0 / 0
05.02.2016, 17:44
    #39164330
_Промешан_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LEFT JOIN + WHERE не дружит с derived таблицами
MasterZiv_Промешан_Хм... действительно.

Почему-то я думал, что это правило будет относиться только к ограничиваемой таблице, а не ко всему результирующему выбору.
Спасибо.

К ограничиваемой таблице оно будет относится только внутри фразы ... JOIN ON
Да, это я уже осознал :)

Но спасибо.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / LEFT JOIN + WHERE не дружит с derived таблицами / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]