powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Вернемся к нескольким условиям в join
24 сообщений из 24, страница 1 из 1
Вернемся к нескольким условиям в join
    #32575254
Здравствуйте, уважаемый all.
Как то часто бывает необходимо перевести запрос с MSSQL сервера на Access.
И вот-тут то я и наткнулся на грабли, а именно Access не поддерживает несколько условий в Join. Мне необходимо сделать join именно по нескольким уловиям. Как здесь быть?
Вот пример запроса :

select cm_Company.id, cm_Company.Name, cm_CompanyInfo.DateValue
from cm_Company
left outer join cm_CompanyInfo on cm_CompanyInfo.Subj_id = cm_Company.id
left outer join cm_AddInfoType on cm_CompanyInfo.InfoType_id = cm_AddInfoType.id and cm_AddInfoType.Code = 'DateCreate'

Так вот как мне указать условие cm_AddInfoType.Code = 'DateCreate', чтобы произошло связывание имеено по left outer join, а не по жесткому where
...
Рейтинг: 0 / 0
Вернемся к нескольким условиям в join
    #32575268
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Глупые гости умеют читать?
http://www.sql.ru/faq/faq_topic.aspx?fid=213
вопрос 26.
...
Рейтинг: 0 / 0
Вернемся к нескольким условиям в join
    #32575269
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не любит акс когда скобок мало :))

Код: plaintext
1.
2.
3.
select cm_Company.id, cm_Company.Name, cm_CompanyInfo.DateValue
from cm_Company
left outer join cm_CompanyInfo on (cm_CompanyInfo.Subj_id = cm_Company.id)
left outer join cm_AddInfoType on ((cm_CompanyInfo.InfoType_id = cm_AddInfoType.id) and (cm_AddInfoType.Code = 'DateCreate'));

?
...
Рейтинг: 0 / 0
Вернемся к нескольким условиям в join
    #32575270
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
paparome, что-то ты не те скобки поставил. :^)
...
Рейтинг: 0 / 0
Вернемся к нескольким условиям в join
    #32575273
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир СанычГлупые гости умеют читать?
http://www.sql.ru/faq/faq_topic.aspx?fid=213
вопрос 26.

Да - не достаточно скобок поставил :(

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
select cm_Company.id, cm_Company.Name, cm_CompanyInfo.DateValue
from (
cm_Company
left outer join cm_CompanyInfo
on (cm_CompanyInfo.Subj_id = cm_Company.id)
)
left outer join cm_AddInfoType
on ((cm_CompanyInfo.InfoType_id = cm_AddInfoType.id) and (cm_AddInfoType.Code = 'DateCreate'));
...
Рейтинг: 0 / 0
Вернемся к нескольким условиям в join
    #32575275
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
А те, которые поставил раньше, можешь убрать. :^)
...
Рейтинг: 0 / 0
Вернемся к нескольким условиям в join
    #32575276
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Санычpaparome, что-то ты не те скобки поставил. :^)

ИМХО - эти тоже пригодятся :)
...
Рейтинг: 0 / 0
Вернемся к нескольким условиям в join
    #32575283
Даже такие глупые гости как я читать умеют, и могу спросить обратное у Вас?
Я привел запрос в SQL сервере, и как расставить скобки я знаю, вопрос то заключался совсем в другом.
...
Рейтинг: 0 / 0
Вернемся к нескольким условиям в join
    #32575286
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир СанычА те, которые поставил раньше, можешь убрать. :^)

Хм.
Странно - действительно без них тоже работает :)
И почему, мне всегда казалось, что если после on стоит 2 условия, то их надо в скобки?

Типа: ... on (a=a) and (b=b)
...
Рейтинг: 0 / 0
Вернемся к нескольким условиям в join
    #32575290
Большое спасибо : paparome, Владимир Саныч.
...
Рейтинг: 0 / 0
Вернемся к нескольким условиям в join
    #32575299
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скобки расставь. Несколько условий поддерживает, только в конструкторе не всегда может их показать.
...
Рейтинг: 0 / 0
Вернемся к нескольким условиям в join
    #32575304
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О. Пока искал топик про Поросю :) тут уже наотвечали...
...
Рейтинг: 0 / 0
Вернемся к нескольким условиям в join
    #32575315
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир СанычА те, которые поставил раньше, можешь убрать. :^)

Не - Саныч, я понял
Если сравнение идет не с полем, а с константой, то без "моих" скобок ругается матерно :)
...
Рейтинг: 0 / 0
Вернемся к нескольким условиям в join
    #32575353
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Глупый ГостьДаже такие глупые гости как я читать умеют, и могу спросить обратное у Вас?
Я привел запрос в SQL сервере, и как расставить скобки я знаю, вопрос то заключался совсем в другом.
Глупый ГостьБольшое спасибо : paparome, Владимир Саныч.
Интересно... Судя по IP, это писал один и тот же человек.
...
Рейтинг: 0 / 0
Вернемся к нескольким условиям в join
    #32575378
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Саныч, что-то я в этой жизни не понял :(

Запрос типа

Код: plaintext
1.
SELECT t1.id, t2.id
FROM t1 LEFT JOIN t2 ON ((t1.id = t2.id) AND (t2.id =  2 ));

Вернул, не то что я ожидал :(
т.е. он вернул 1 строку
----------
2 2

тоже самое на серваке, возвращает, как я и ожидал:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
create table #t (id int)
insert into #t
select  1  union
select  2  union
select  3 

select t1.id, t2.id
from #t t1 left join #t t2
on ((t1.id = t2.id) and (t2.id =  2 ))

drop table #t
------------
1 null
2 2
3 null

В чем глюк?
PS: проверял на Акс97
...
Рейтинг: 0 / 0
Вернемся к нескольким условиям в join
    #32575415
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Есть какой-то баг, который в свое время нашел Лох. Сейчас поищу по форуму.
...
Рейтинг: 0 / 0
Вернемся к нескольким условиям в join
    #32575432
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир СанычЕсть какой-то баг, который в свое время нашел Лох. Сейчас поищу по форуму.

Нет - как это обойти я представляю :)
Смущает другое:
На маленьком запросе сразу видно, что тебя "прокатили" и ищешь обходы, но когда в большом запросе все делаешь честно, а потом не понимаешь, что-то сумма не сходится - смотришь запрос, вроде все гуд.

Блин - вот так и рушаться цивилизации :(
...
Рейтинг: 0 / 0
Вернемся к нескольким условиям в join
    #32575433
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Вось.
/topic/40342
...
Рейтинг: 0 / 0
Вернемся к нескольким условиям в join
    #32575446
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир СанычВось.
/topic/40342

Не совсем то - но спасибо :)

Т.е. у меня такое подозрение, что когда идет связка по константе, то он ее проверяет после связки, а не до (все равно, что во Where это условие вынесли), в итоге Left/Right - работают как простенький Inner :(

Обидно :(
...
Рейтинг: 0 / 0
Вернемся к нескольким условиям в join
    #32575467
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
paparomeТ.е. у меня такое подозрение, что когда идет связка по константе, то он ее проверяет после связки, а не до (все равно, что во Where это условие вынесли), в итоге Left/Right - работают как простенький Inner :(

Обидно :(
Так у Лоха тоже связка по константе.
...
Рейтинг: 0 / 0
Вернемся к нескольким условиям в join
    #32575769
фыыф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
дупль
Код: plaintext
1.
SELECT t1.id, t2.id
FROM t1 LEFT JOIN t2 ON ((t1.id = t2.id) AND (t2.id =  2 ));

Замени на
Код: plaintext
1.
SELECT t1.id, t2.id
FROM t1 LEFT JOIN t2 ON ((t1.id = t2.id) AND (t2.id =  2  + t1.id -t1.id));


зы. Иногда до меня доходит. Вот дошло посля года как..., и надо ж - работает
...
Рейтинг: 0 / 0
Вернемся к нескольким условиям в join
    #32575780
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
фыыфдупль
Код: plaintext
1.
SELECT t1.id, t2.id
FROM t1 LEFT JOIN t2 ON ((t1.id = t2.id) AND (t2.id =  2 ));

Замени на
Код: plaintext
1.
SELECT t1.id, t2.id
FROM t1 LEFT JOIN t2 ON ((t1.id = t2.id) AND (t2.id =  2  + t1.id -t1.id));


зы. Иногда до меня доходит. Вот дошло посля года как..., и надо ж - работает

Круто :)
Предлагаю в ФАК - сам не проверял

А может трабл в СервисПаках?
...
Рейтинг: 0 / 0
Вернемся к нескольким условиям в join
    #32575793
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня ТАКОЕ было :
добавлял и отнимал от поля счётчик 1 ---> всё лечилось
...
Рейтинг: 0 / 0
Вернемся к нескольким условиям в join
    #32575800
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин - проверил :)
И действительно робит :)

Обманули :)

Хитрый какой-то оптимизатор запросов у Акса - по хорошему не понимает
Типа если константа, так и нефиг ей в условии связывания делать, а если поле или формула от полей, то все ГУД :)

2 фыыф
СПАСИБО тебе
А то я уже стреляться надумал :(
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Вернемся к нескольким условиям в join
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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