Гость
Форумы / MySQL [игнор отключен] [закрыт для гостей] / LEFT JOIN разный результат / 6 сообщений из 6, страница 1 из 1
04.04.2019, 21:45
    #39796820
alexnews
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LEFT JOIN разный результат
Не знаю как сформулировать запрос, поэтому спрашиваю тут:
Два LEFT JOIN, но разные результат и разница только в том, что в одном WHERE в другом нет. Поясните или отошлите, пожалуйста в документацию для понимания. Заранее спасибо .

Код: 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.
CREATE table test1 (id INT, new_id INT, typeof VARCHAR(10));
CREATE table test2 (id INT, new_id INT);
                
CREATE TABLE `test1` (
  `id` int(11) DEFAULT NULL,
  `new_id` int(11) DEFAULT NULL,
  `typeof` varchar(10) DEFAULT NULL
) ENGINE=InnoDB;

CREATE TABLE `test2` (
  `id` int(11) DEFAULT NULL,
  `new_id` int(11) DEFAULT NULL
) ENGINE=InnoDB;

INSERT INTO `test1` (`id`, `new_id`, `typeof`)
VALUES
	(2, 10, 'ECC'),
	(3, 122, 'ECC'),
	(4, 3, 'ECC'),
	(5, 2, 'ECC'),
	(6, 1, 'ECC'),
	(1, 1, NULL);

INSERT INTO `test2` (`id`, `new_id`)
VALUES
	(1, 1),
	(2, 122),
	(4, 3);

        SELECT test1.*,test2.* FROM test1 LEFT JOIN test2 ON test1.new_id=test2.new_id WHERE test1.typeof='ECC'; -- 5
        SELECT test1.*,test2.* FROM test1 LEFT JOIN test2 ON test1.new_id=test2.new_id AND test1.typeof='ECC'; -- 6
...
Рейтинг: 0 / 0
04.04.2019, 21:51
    #39796822
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LEFT JOIN разный результат
alexnews,

В первом случае у вас есть where и вы получите из test1 только строки удовлетворяющие условию. Плюс джойн данных из test2 что совпадёт.
Во втором запросе вы запрашиваете все строки из test1 (нет where), плюс left join только для тех строк у которых typeof='ECC' и совпадает new_id.
Результат ровно тот, который запросили.
...
Рейтинг: 0 / 0
04.04.2019, 21:59
    #39796826
alexnews
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LEFT JOIN разный результат
Melkijalexnews,

В первом случае у вас есть where и вы получите из test1 только строки удовлетворяющие условию. Плюс джойн данных из test2 что совпадёт.

здесь 100% согласен

Во втором запросе вы запрашиваете все строки из test1 (нет where), плюс left join только для тех строк у которых typeof='ECC' и совпадает new_id.
Результат ровно тот, который запросили.

с первым объяснением согласен, но вот второе не очень:

Код: sql
1.
LEFT JOIN test2 ON test1.new_id=test2.new_id AND test1.typeof='ECC'



Тут же явно указано что только ЕСС в чем проблема?
...
Рейтинг: 0 / 0
04.04.2019, 23:44
    #39796853
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LEFT JOIN разный результат
alexnews,

указано где? В условии связывания таблиц. Связь вы запросили left join, то есть при отсутствии строки по условию связывания в test2 строка из test1 всё равно будет в результате.
...
Рейтинг: 0 / 0
05.04.2019, 07:27
    #39796916
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LEFT JOIN разный результат
alexnews
Код: sql
1.
LEFT JOIN test2 ON test1.new_id=test2.new_id AND test1.typeof='ECC'


Тут же явно указано что только ЕСС в чем проблема?
Кляуза ON при LEFT JOIN ограничивает только правую таблицу. Потому условие по левой таблице фактически игнорируется.
...
Рейтинг: 0 / 0
05.04.2019, 16:36
    #39797433
alexnews
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LEFT JOIN разный результат
Akinaalexnews
Код: sql
1.
LEFT JOIN test2 ON test1.new_id=test2.new_id AND test1.typeof='ECC'


Тут же явно указано что только ЕСС в чем проблема?
Кляуза ON при LEFT JOIN ограничивает только правую таблицу. Потому условие по левой таблице фактически игнорируется.
Спасибо Акина, похоже это фича.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / LEFT JOIN разный результат / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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