Left Join по двум полям

SQL во всех проявлениях - от ANSI-92 до TSQL.

Модераторы: Yurich, Absurd

Ответить
Dr_Grizzly
Сообщения: 406
Зарегистрирован: 13 сен 2004, 12:05
Откуда: Курган
Контактная информация:

05 июн 2012, 06:22

Добрый день! Помогите разобраться в чем косяк.... Есть две таблицы, я создаю две виртуальные таблицы по каждой физической в которых есть 2 ключевых поля. По отдельности запрос выдает данные из двух виртуальных таблиц без проблем. Т.е. данные в них есть. Теперь хочу объединить эти две таблицы в одну, связав их по двум ключевым полям.

Код: Выделить всё


create view tab1 as select name,clas,Count(ochag.regnomer) as kolvo from ochag
group by clas,name

create view tab2 as select name,clas, sum(ples) as ples, sum(verh) as verh, sum(pneles) as pneles, sum(pnoles) as pnoles from ochag, fire where ochag.key=fire.ochagkey 
group by clas,name

Select * from tab1 left join tab2 on tab1.name=tab2.name and tab1.clas=tab2.clas

И тут получаю данные только для левой таблицы и колонки для правой, но с пустыми значениями. Меняю Left на Right и все наоборот получается....

P.S. запросы на Access SQL
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто! ;) Да! Кстати! Ctrl+V реально вставляет!!! ХDD
Dr_Grizzly
Сообщения: 406
Зарегистрирован: 13 сен 2004, 12:05
Откуда: Курган
Контактная информация:

05 июн 2012, 07:34

Вспомнил про свой метод через построитель запросов в самом Аксесе )) И результат стал интересным
Сначала запустил свои запросы по отдельности. И в запросе с Tab2 обнаружил ошибку цикличности по полю ples. Переназвал его. Запрос запустился. Хотя из приложения Дельфы - этот запрос без всяких косяков срабатывал.
Затем взял эти две таблицы - бросил в построитель, создал связь по двум полям и получил SQL код

SELECT tab1.*, tab2.*
FROM tab1 left JOIN tab2 ON (tab1.clas = tab2.clas) AND (tab1.name = tab2.name);

Получилось, что построитель поменял местами в условии поля....
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто! ;) Да! Кстати! Ctrl+V реально вставляет!!! ХDD
Ответить