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

Запрос по left join

26.03.2014, 17:41. Показов 2255. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Подскажите логику запроса.

Имеется стандартный
T-SQL
1
2
3
4
5
select A.name1, A.name2, count (B.name3)
FROM TableA A
LEFT JOIN TableB B
ON A.Key=B.Key
group by A.name1, A.name2
Добавляю условие:
T-SQL
1
Where A.field='xxx'
Нормально отрабатывает и отображает 35 записей (т.е. все из TableA отсеянные по условию)

Но как только условие меняю на:
T-SQL
1
Where A.field1='xxx' and B.field2>'2/26/2014'
То отображает только 25 записей, т.е. видимо те, которые по TableB удовлетворили условию.

Почему не отображаются в этом случае все записи из TableA как должно быть по left join?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.03.2014, 17:41
Ответы с готовыми решениями:

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

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

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

15
Native x86
Эксперт Hardware
 Аватар для quwy
6857 / 3790 / 1025
Регистрация: 13.02.2013
Сообщений: 11,861
26.03.2014, 17:48
ALARMus75, потому что условие WHERE должно выполнятся полностью для того, чтобы запись попала в результат. В вашем случае вывелись те записи, у которых A.field1='xxx', но при этом B.Key=A.Key и B.field2>'2/26/2014'. Хотите обратного, используйте OUTER JOIN.
1
1 / 1 / 0
Регистрация: 10.02.2014
Сообщений: 98
26.03.2014, 17:55  [ТС]
Я хочу все записи из TableA и к ним те записи из TableB, которые так же удовлетворяют своим критериям отбора, соответственно если получилось так, что к записи из TableA (к отобранным 2-м колонкам) не имеют по условиям отбора для TableB ничего, то в 3-й колонке (в соответствующей строке) было бы просто пусто (или null)
0
Native x86
Эксперт Hardware
 Аватар для quwy
6857 / 3790 / 1025
Регистрация: 13.02.2013
Сообщений: 11,861
26.03.2014, 18:08
ALARMus75, ну так все правильно, вот тут все доходчиво и с примерами.

Добавлено через 1 минуту
Хотя у вас там count... Тогда подзапросом нужно сделать и join вообще не нужен.
0
1 / 1 / 0
Регистрация: 10.02.2014
Сообщений: 98
26.03.2014, 18:16  [ТС]
т.е. LEFT JOIN заменить на LEFT OUTER JOIN ? (результат не изменился )
0
Native x86
Эксперт Hardware
 Аватар для quwy
6857 / 3790 / 1025
Регистрация: 13.02.2013
Сообщений: 11,861
26.03.2014, 18:19
У вас из второй таблицы ничего не выбирается по сути, джоины не нужны, нужно что-то типа такого:
SQL
1
2
3
4
SELECT A.name1, A.name2, 
  (SELECT COUNT(0) FROM TableB B WHERE B.Key = A.Key AND B.field2 > '2/26/2014') AS CountB
FROM TableA A
WHERE A.field1 = 'xxx'
0
 Аватар для nixon93nixon
63 / 63 / 21
Регистрация: 08.02.2013
Сообщений: 262
26.03.2014, 18:25
Лучший ответ Сообщение было отмечено ALARMus75 как решение

Решение

SQL
1
AND B.field2>'2/26/2014'
убери из where и добавь сюда
SQL
1
ON A.Key=B.Key AND B.field2>'2/26/2014'
Добавлено через 4 минуты
хотя не, бред, выше пост смотри
1
1 / 1 / 0
Регистрация: 10.02.2014
Сообщений: 98
26.03.2014, 18:27  [ТС]
а вот это помогло (условие на дату запихать в ON)
0
119 / 111 / 47
Регистрация: 09.07.2013
Сообщений: 209
27.03.2014, 10:08
Условие в WHERE на правую таблицу из LEFT JOIN превращает его в INNER JOIN
0
1116 / 761 / 183
Регистрация: 27.11.2009
Сообщений: 2,272
27.03.2014, 10:14
Цитата Сообщение от Serpentariy Посмотреть сообщение
Условие в WHERE на правую таблицу из LEFT JOIN превращает его в INNER JOIN
Смотря какое условие.
То, которое показано здесь, конечно превращает.
0
 Аватар для nixon93nixon
63 / 63 / 21
Регистрация: 08.02.2013
Сообщений: 262
27.03.2014, 10:15
никто никого не превращает
просто нужно знать порядок выполнения select и все
сначала выполняется from, то есть сначала берутся данные из таблицы A затем B, по условию ON(в нашем случае с left join), а where уже отбирает данные из отношения, получившегося из A и B, если я не путаю
1
119 / 111 / 47
Регистрация: 09.07.2013
Сообщений: 209
27.03.2014, 11:08
Цитата Сообщение от iap Посмотреть сообщение
Смотря какое условие.
То, которое показано здесь, конечно превращает.
Это да. IS (NOT) NULL не превращает
0
1 / 1 / 0
Регистрация: 10.02.2014
Сообщений: 98
27.03.2014, 11:45  [ТС]
Я так понимаю:
Чтобы остался список полный из TableA(по left join как левая таблица) в where надо указывать условия только для таблицы TableA
0
 Аватар для nixon93nixon
63 / 63 / 21
Регистрация: 08.02.2013
Сообщений: 262
27.03.2014, 11:48
что в твоем понимании "полный список"
все записи из таблицы А?
0
1 / 1 / 0
Регистрация: 10.02.2014
Сообщений: 98
27.03.2014, 14:54  [ТС]
Да все записи из таблицы А (все или отобранные по условию для этой таблицы если есть таковое) и чтобы условия на таблицу В не изменяли заданный набор для таблицы А
0
 Аватар для nixon93nixon
63 / 63 / 21
Регистрация: 08.02.2013
Сообщений: 262
27.03.2014, 14:56
да, именно так
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.03.2014, 14:56
Помогаю со студенческими работами здесь

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

Задвоение при LEFT JOIN
Доброго времени суток. При решении задач с сайта http://www.sql-ex.ru столкнулась со странной работой оператора LEFT JOIN. Имеются...

left outer join по паре полей
есть две таблицы, ключ двойной, как их склеить left outer join'ом чтобы множество не расширялось слишком сильно, т.е чтобы для каждой...

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 поля-ключа. В каждой по миллиону записей примерно. Когда я...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru