Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 01.10.2018
Сообщений: 10

Left Join возвращает неверные результат

07.06.2024, 15:18. Показов 803. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем здоровья.
Давно не использовал в запросах Left join, и столкнулся с такой ситуацией

первый запрос
T-SQL
1
2
3
SELECT u.id,  U.U_Name , x.id_id,X.S_Kolvo 
FROM   dbo.T_Uslug U
  left JOIN ( select b.id_id, b.S_Kolvo from dbo.T_ZSostav B WHERE  B.T_Typ = 2 AND   B.id_Zakaz = 102525 and b.id_id<1000000 ) X ON (U.id =X.id_id )
результат извлечено 363 записи

второй запрос

T-SQL
1
2
3
4
SELECT u.id,  U.U_Name , x.id_id,X.S_Kolvo 
FROM   dbo.T_Uslug U
left JOIN dbo.T_ZSostav X ON (U.id = X.id_id)
WHERE  X.T_Typ = 2 AND   X.id_Zakaz = 102525 and x.id_id<1000000
вернул 87 записей
Вопрос почему второй запрос вернул данные как будто запрос Inner Join?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.06.2024, 15:18
Ответы с готовыми решениями:

Left outer join возвращает null
SELECT .*, s.Id as SiteId, . as , ., . as , b. as BlogTitle, t.Cost FROM Sites as s INNER JOIN Blogs as b ON b.Id = b.SiteId INNER...

LEFT JOIN странно влияет на результат запроса
Вопрос скорее теоретического характера. Есть 2 таблицы, связанные через 4 поля-ключа. В каждой по миллиону записей примерно. Когда я...

LEFT JOIN ???
После выполнения запроса с использованием LEFT JOIN в конце результирующего набора данных добавляются какие-то пустые записи ! Что это...

15
670 / 293 / 120
Регистрация: 12.04.2022
Сообщений: 1,002
07.06.2024, 15:29
Цитата Сообщение от slavakvs Посмотреть сообщение
Вопрос почему второй запрос вернул данные как будто запрос Inner Join?
Потому, что предикат

T-SQL
1
WHERE X.T_Typ = 2 AND X.id_Zakaz = 102525 and x.id_id<1000000
"отрезает" записи у которых X.T_Typ, X.id_Zakaz, x.id_id "равны" NULL

Посмотрите, в первой выборке есть x.id_id = NULL, во второй таких записей нет ()
1
0 / 0 / 0
Регистрация: 01.10.2018
Сообщений: 10
07.06.2024, 15:34  [ТС]
Цитата Сообщение от PaulWist Посмотреть сообщение
Посмотрите, в первой выборке есть x.id_id = NULL, во второй таких записей нет ()
нет такого, все записи в поле x.id_id имею значения.
Я не приверженец держать значения NULL, предпочитаю что-бы все поля в записи имели значения или по дефолту предопределенные
0
0 / 0 / 0
Регистрация: 01.10.2018
Сообщений: 10
07.06.2024, 15:42  [ТС]
Даже визуально
Миниатюры
Left Join возвращает неверные результат  
0
 Аватар для Andrey-MSK
3343 / 2230 / 387
Регистрация: 14.08.2018
Сообщений: 7,532
Записей в блоге: 4
07.06.2024, 15:49
Цитата Сообщение от slavakvs Посмотреть сообщение
Я не приверженец держать значения NULL, предпочитаю что-бы все поля в записи имели значения или по дефолту предопределенные
Ну и здря... NULL хорошая вещь, если правильно пользоваться
0
0 / 0 / 0
Регистрация: 01.10.2018
Сообщений: 10
07.06.2024, 15:54  [ТС]
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
Ну и здря... NULL хорошая вещь, если правильно пользоваться
где надо использую, но в исключительных случаях.
Сейчас вопрос не об этом.
0
 Аватар для Andrey-MSK
3343 / 2230 / 387
Регистрация: 14.08.2018
Сообщений: 7,532
Записей в блоге: 4
07.06.2024, 15:56
Цитата Сообщение от slavakvs Посмотреть сообщение
Вопрос почему второй запрос вернул данные как будто запрос Inner Join?
Потому что LEFT JOIN показывает ещё те записи из левой таблицы, для которых в правой таблице нет значений - NULL. А у вас все везде есть и потому получился INNER JOIN.
0
0 / 0 / 0
Регистрация: 01.10.2018
Сообщений: 10
07.06.2024, 16:04  [ТС]
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
Потому что LEFT JOIN показывает ещё те записи из левой таблицы, для которых в правой таблице нет значений - NULL. А у вас все везде есть и потому получился INNER JOIN.
LEFT [OUTER] JOIN
Левое внешнее соединение возвращает все строки из таблицы, указанной слева от слова JOIN. Если для некоторых строк из левой таблицы нет соответствующих строк в правой, то они все равно не отбрасываются, при этом в столбцы, соответствующие правой таблице, помещаются значения NULL. Хорошим тоном считается не смешивать использование правых и левых соединений, а использовать всегда только левое соединение.
0
 Аватар для Andrey-MSK
3343 / 2230 / 387
Регистрация: 14.08.2018
Сообщений: 7,532
Записей в блоге: 4
07.06.2024, 16:11
slavakvs, А я что вам написал? У вас все условия в таблицах совпали и получился INNER JOIN. Сделайте заведомо ложное условие для правой таблицы и увидите в выборке NULL для данных правой таблицы.
0
0 / 0 / 0
Регистрация: 01.10.2018
Сообщений: 10
07.06.2024, 16:25  [ТС]
Andrey-MSK,
не совпали, в левой таблице 294 записи, они все должны были попасть в результат плюс записи которые по inner join
попробую сделать пару ложных условий

Добавлено через 7 минут
Andrey-MSK,
увы, левая таблица имеет 294 записи, правая 87, при inner join результат 84 (3 записи сделал ложным)
left дает те-же 84...
0
 Аватар для Andrey-MSK
3343 / 2230 / 387
Регистрация: 14.08.2018
Сообщений: 7,532
Записей в блоге: 4
07.06.2024, 16:27
slavakvs,
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
FROM 
    dbo.tblGenPlan g 
        INNER JOIN 
        dbo.tblDraw d ON g.ID_GenPlan = d.ID_GenPlan
        INNER JOIN 
        dbo.tblDrawSys ds ON d.ID_Draw = ds.ID_Draw
        INNER JOIN 
        dbo.tblDrawSpec dp ON ds.ID_DrawSys = dp.ID_DrawSys
        LEFT JOIN 
        dbo.tblPPData pp ON dp.ID_DrawSpec = pp.ID_DrawSpec
        LEFT JOIN
        dbo.tblLaborHB_02 l ON pp.ID_LaborHB_02 = l.ID_LaborHB_02
        LEFT JOIN
        dbo.tblLaborHBGroups lg ON l.ID_LaborHBGroup = lg.ID_LaborHBGroup
WHERE
    g.ID_EObject = 2
    AND
    d.ID_Branch = 1
Выдаёт NULL где надо...
1
0 / 0 / 0
Регистрация: 01.10.2018
Сообщений: 10
07.06.2024, 21:59  [ТС]
Andrey-MSK,

ответ прост, Where отрабатывает после получения всех строк.
Миниатюры
Left Join возвращает неверные результат  
0
 Аватар для Аватар
5393 / 1465 / 513
Регистрация: 31.05.2012
Сообщений: 5,153
08.06.2024, 08:55
Цитата Сообщение от slavakvs Посмотреть сообщение
Left Join возвращает неверные результат

Не по теме:

вот микрософтовцы гады, не могут так написать движок что бы left join возвращал правильный результат ))

0
0 / 0 / 0
Регистрация: 01.10.2018
Сообщений: 10
08.06.2024, 09:38  [ТС]
Цитата Сообщение от Аватар Посмотреть сообщение
вот микрософтовцы гады, не могут так написать движок что бы left join возвращал правильный результат ))
__________________
По вопросу темы есть что-то сказать? Похоже что нет. Зачем пытаться казаться умным?
Andrey-MSK, PaulWist пытались помочь и самим разобраться, за что им спасибо.
Когда человек выдает свой ответ по теме вопроса, он разбирается в этом, пытается на основание своих знаний решить вопрос и при этом пополнить свой багаж знаний и опыта. Пусть может и ответ не всегда правильный, но есть размышление, мнение, спорт в результате которого будет правильное решение.
Вы решили, что самый умный, так надо было ум свой показать до появления правильного решения, а так вы выглядите как *******, сами знаете как выглядите со своим ответом.
Всем удачи.
Тему можно закрывать.
0
08.06.2024, 09:47

Не по теме:

У меня не ответ, а оффтоп). ТС заявил что микрософт ошибся, в результате оказалось что ошибся ТС. Билл обиделся. Где извинения перед микрософтом?

0
 Аватар для Andrey-MSK
3343 / 2230 / 387
Регистрация: 14.08.2018
Сообщений: 7,532
Записей в блоге: 4
10.06.2024, 09:18
Цитата Сообщение от slavakvs Посмотреть сообщение
ответ прост, Where отрабатывает после получения всех строк.
Дак вы даёте условие только на правую таблицу, а вам показал с условием на левую, потому у меня всё прекрасно работает. Смените тип на RIGHT JOIN и посмотрите что будет.

Добавлено через 34 минуты
Цитата Сообщение от slavakvs Посмотреть сообщение
ответ прост, Where отрабатывает после получения всех строк.
А причем тут это? Порядок выполнения операторов известен - FROM [JOIN], WHERE, SELECT. У вас просто условие только на правую таблицу. Либо меняйте на RIGHT JOIN, либо делайте её левой.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.06.2024, 09:18
Помогаю со студенческими работами здесь

СТЕ и left join
Суть вопроса в том что левое соединение рузультирует таблицу, которую можно получить только внутренним соединением в таблице КВ хранятся...

Запрос по left join
Здравствуйте. Подскажите логику запроса. Имеется стандартный select A.name1, A.name2, count (B.name3) FROM TableA A LEFT JOIN...

Distinct И Left Join
Делаю выборку, отображающую количество заказов клиентов за различные периоды. Упёрся в то, что по одному клиенту выводятся строки по...

Рекурсия с left join
Добрый день. Помогите написать рекурсию. Много раз пытался через with сделать, но что-то мне не дается нормально ее замкнуть. Сама...

Запрос с Left Join
Ребят, помогите пожалуйста разобраться! Нужно запрос построить, вообще, в Access, но думаю не принципиально, лишь бы используя язык SQL. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru