Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Вернемся к нескольким условиям в join / 24 сообщений из 24, страница 1 из 1
24.06.2004, 12:10:46
    #32575254
Вернемся к нескольким условиям в join
Здравствуйте, уважаемый 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
24.06.2004, 12:14:13
    #32575268
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вернемся к нескольким условиям в join
Глупые гости умеют читать?
http://www.sql.ru/faq/faq_topic.aspx?fid=213
вопрос 26.
...
Рейтинг: 0 / 0
24.06.2004, 12:14:26
    #32575269
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вернемся к нескольким условиям в join
Не любит акс когда скобок мало :))

Код: 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
24.06.2004, 12:15:29
    #32575270
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вернемся к нескольким условиям в join
paparome, что-то ты не те скобки поставил. :^)
...
Рейтинг: 0 / 0
24.06.2004, 12:16:27
    #32575273
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вернемся к нескольким условиям в join
Владимир СанычГлупые гости умеют читать?
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
24.06.2004, 12:17:11
    #32575275
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вернемся к нескольким условиям в join
А те, которые поставил раньше, можешь убрать. :^)
...
Рейтинг: 0 / 0
24.06.2004, 12:17:11
    #32575276
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вернемся к нескольким условиям в join
Владимир Санычpaparome, что-то ты не те скобки поставил. :^)

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

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

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

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

Запрос типа

Код: 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
24.06.2004, 13:03:41
    #32575415
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вернемся к нескольким условиям в join
Есть какой-то баг, который в свое время нашел Лох. Сейчас поищу по форуму.
...
Рейтинг: 0 / 0
24.06.2004, 13:08:21
    #32575432
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вернемся к нескольким условиям в join
Владимир СанычЕсть какой-то баг, который в свое время нашел Лох. Сейчас поищу по форуму.

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

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

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

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

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

Обидно :(
Так у Лоха тоже связка по константе.
...
Рейтинг: 0 / 0
24.06.2004, 15:19:47
    #32575769
фыыф
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вернемся к нескольким условиям в join
дупль
Код: 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
24.06.2004, 15:22:59
    #32575780
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вернемся к нескольким условиям в join
фыыфдупль
Код: 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
24.06.2004, 15:27:46
    #32575793
Shuhard
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вернемся к нескольким условиям в join
у меня ТАКОЕ было :
добавлял и отнимал от поля счётчик 1 ---> всё лечилось
...
Рейтинг: 0 / 0
24.06.2004, 15:30:28
    #32575800
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вернемся к нескольким условиям в join
Блин - проверил :)
И действительно робит :)

Обманули :)

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

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


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