powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / LEFT JOIN + WHERE не дружит с derived таблицами
7 сообщений из 7, страница 1 из 1
LEFT JOIN + WHERE не дружит с derived таблицами
    #39163427
_Промешан_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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
LEFT JOIN + WHERE не дружит с derived таблицами
    #39163430
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Промешан_
Код: 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
LEFT JOIN + WHERE не дружит с derived таблицами
    #39163432
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Промешан_Стоит убрать 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
LEFT JOIN + WHERE не дружит с derived таблицами
    #39163474
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft,
ну и нет смысла писать что-то в WHERe кроме is null, is not null на таблицу, если с ней делается LEFT JOIN, он автоматом превращается в INNER JOIN.
...
Рейтинг: 0 / 0
LEFT JOIN + WHERE не дружит с derived таблицами
    #39164248
_Промешан_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хм... действительно.

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

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

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

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

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

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


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