powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / LEFT JOIN разный результат
6 сообщений из 6, страница 1 из 1
LEFT JOIN разный результат
    #39796820
Фотография alexnews
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не знаю как сформулировать запрос, поэтому спрашиваю тут:
Два 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
LEFT JOIN разный результат
    #39796822
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexnews,

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

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


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


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


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