Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Запрос [D6, IB5.x]


Анна ©   (2003-05-06 19:51:00) 

Добрый вечер мастера.
Добавляю в IBQuery запрос:
select FULL_NAME, STATE, TOWN, ADRESS, NAME_CURATOR, NAME_BANK, NAME_BRANCH
from CURATOR Right join (Bank right join (Branch right join Firm on Branch.code_branch=Firm.code_branch) on Bank.code_bank=Firm.code_firm) on Curator.code_curator=Firm.code_firm
Всё работает, но в Гриде поля с названиями из таблиц Банк, куратор и отрасль не показываются.
Что не так? И вообще может это лучше не в Query делать?


Анна   (2003-05-07 23:10:00) [1]

В споре родилась истина!
Всем Спасибо!


Zacho   (2003-05-07 18:28:00) [2]


> Анна (07.05.03 18:10)

Приведи краткую структуру своих таблиц (только поля входящие в PK и FK), краткое описание связей и какой результат запроса тебе нужен. Тогда попробуем помочь, а без этой информации гадание на кофейной гуще получается.
P.S.:

> По сути правильно с right

Любой запрос с соединениями только одного типа (LEFT или RIGHT) можно переделать в запрос с соединениями противоположной направленности. Лично мне удобнее работать с LEFT JOIN - как-то проще глядя на запрос представлять структуру связей.


Анна   (2003-05-07 18:10:00) [3]

Ещё раз прошу прощения, но вопрос открыт.
Шляпа, товарищи, с этими объединениями. По сути правильно с right. Но не работает же! А в Access почему тогда работает? Все joins уже перепробованы.
Ещё идеи есть?
>2Sheriff
А что, так нельзя?


Sheriff   (2003-05-07 16:10:00) [4]

> Т-ца Firm: code_firm(primary) Full_name, town, adress, state, code_bank, code_branch, code_curator (внешние ключи).

> В Firm поля code_... кроме первичного могут быть null
у вас есть записи с неопределенными значениями внешних ключей?


Dona   (2003-05-07 15:26:00) [5]

Может, попробовать как предлагал Sheriff, но c LEFT JOIN

select f.FULL_NAME, f.STATE, f.TOWN, f.ADRESS, c.NAME_CURATOR, b.NAME_BANK, r.NAME_BRANCH
from Firm f LEFT JOIN Bank b .......


Zacho   (2003-05-07 15:12:00) [6]

Сейчас нет времени детально разбираться с твои запросом, но небольшой совет - почему бы не переписать его в виде:
SELECT ... FROM ...
RIGHT JOIN ... ON ..
RIGHT JOIN .. ON ..
RIGHT JOIN .. ON ..
...
без всяких "вложенных" JOIN"ов


Анна   (2003-05-07 15:06:00) [7]

Так рисковала в самом начале. Не оправдалось. В Firm поля code_... кроме первичного могут быть null. А так выводятся только все фирмы с заполненными и code_bank и code_branch и code_curator. Надо чтобы из Firm все выводились.


Sheriff   (2003-05-07 13:49:00) [8]

рискните... ;)

select f.FULL_NAME, f.STATE, f.TOWN, f.ADRESS, c.NAME_CURATOR, b.NAME_BANK, r.NAME_BRANCH
from Firm f, Bank b, Branch r, Curator c
where r.code_branch=f.code_branch and b.code_bank=f.code_bank and c.code_curator=f.code_curator


Анна   (2003-05-07 13:38:00) [9]

Прошу прощения.
Т-ца Firm: code_firm(primary) Full_name, town, adress, state, code_bank, code_branch, code_curator (внешние ключи).
Bank: code_banl(primary), name_bank
Branch: code_branch(primary), name_branch
Curator: code_curator(primary), name_curator.
В запросе должна выводиться инф-я о Firm + названия банка, отрасли и куратора.
Выводится только всё из Firm+ соответствующее из Branch.
Такой же запрос в Access работает, а в IB нет
Help...


ЮЮ   (2003-05-07 06:24:00) [10]

Так твой запрос и предназначен для того, чтобы вывести все фирмы, независимо есть они в таблице CURATOR или нет. Для фирм, которых нет в таблице CURATOR там и будут все NULL-ы


Rol   (2003-05-07 06:17:00) [11]

2Анна
А что, структура твоих таблиц понятна из приведённого запроса?
Хочешь получить ответ, научись задавать вопрос. Видимо, телепаты пока что не занялись вплотную программированием.


Анна   (2003-05-07 00:02:00) [12]

2Johnmen ©
Издиваися? Вечер итак убит на эту запросину!


Johnmen   (2003-05-06 23:59:00) [13]

Чего-чего...Вдумчиво разобраться в логике работы соединений...
Внимательно почитать SQL Reference Guide.


Анна   (2003-05-06 23:31:00) [14]

Сил нет!!! Не работает!
Показывает только Всё из Firm и соответствующее из Branch. Остальное null. В IBExpertе тоже самое.
Делать то чего?


Sergey Masloff   (2003-05-06 21:23:00) [15]

Для однозначности неплохо бы "квалифицировать" названия полей. Типа:
select Cr.FULL_NAME, Cr.STATE, Cr.TOWN, Cr.ADRESS, Cr.NAME_CURATOR, Bn.NAME_BANK, Br.NAME_BRANCH
from CURATOR CR Right join (Bank Bn right join (Branch Br right join Firm Fr on Br.code_branch=Fr.code_branch) on Bn.code_bank=Fr.code_firm) on Cr.code_curator=Fr.code_firm

Естественно префиксы я расставил от балды так как не знаю что откуда. Но общая идея, я думаю, понятна. И в грид все должно нормально отображаться, и Query тут к месту


Наверх

Титульная страница Поиск, карта сайта Написать письмо