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

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

Связанные таблицы [D5, IB5.x]


sanbah ©   (2003-04-24 09:34:00) 

Помогите решть следующую задачу

Есть две связанные таблицы

1 таблица главная
Id Name Doxod
1 Стол 20
2 Стул 10
...

2 таблица подчиненная
Id Name Zatrati Id_1tabl
1 Клей 2 1
2 Гвозди 3 1
...

Нужно написать запрос в который попадают все записи 1таблицы и сумма поля
Zatrati для каждой записи т.е.

Стол 20 5
Стул 10 0


sanbah   (2003-04-24 22:07:00) [1]

Всем спасибо все получилось через Left JOIN т.к. советовал Johnmen


MsGuns   (2003-04-24 16:11:00) [2]

>sanbah (24.04.03 13:56)
>SELECT M.Name, M.Doxod, SUM(D.Zatrati) [as AllCost]
Что, прям так и всобачил ? Вместе с моими примечаниями об именовании динамически образуемых полей ?

>Johnmen © (24.04.03 14:13)

Не очень внимательно проглядел схему данных ;(( Если в детале может не быть вообще записей по какой-то мастер-записи, а ее все же надо включать в рез.НД с пустотами вместо цифири, то тогда, конечно ;))


Johnmen   (2003-04-24 14:13:00) [3]

Как уже было сказано нужен LEFT

SELECT M.Name,M.Doxod,SUM(D.Zatrati) FROM Table1 M
LEFT JOIN Table2 D ON D.Id_1tabl=M.Id
GROUP BY M.Name,M.Doxod



sanbah   (2003-04-24 13:56:00) [4]

>MsGuns © (24.04.03 12:27)
SELECT M.Name, M.Doxod, SUM(D.Zatrati) [as AllCost]
FROM Table1 M, Table2 D
WHERE D.Id_1tabl=M.Id
На этот запрос вылетает следующая ошибка -104 (invalid column referense)
Ошибка вылетает когда пишу SUM(D.Zatrati).

В подчиненной таблице затраты могут отсутствовать Это отображено в примере "Стул"

Также пробовал через JOIN ошибка таже


MsGuns   (2003-04-24 12:27:00) [5]

SELECT M.Name, M.Doxod, SUM(D.Zatrati) [as AllCost]
FROM Table1 M, Table2 D
WHERE D.Id_1tabl=M.Id

На фига JOIN там, где он в принципе не нужен ? Ведь в детале нет записей с указателем, отсутствующем в Мастере. А если даже и есть (суть нарушение целостности), то для данного запроса (итого по столам, т.е. ключам Мастера) они и на фиг не нужны.



Orlan Master   (2003-04-24 11:38:00) [6]

>D
А правила обязательного наличия значения задаются на уровне аттрибута сущности. А их вроде как не огласили. Согласен, что такой запрос в качестве отладочного для проверки наличия null-евых записей через OUTER JOIN в самый раз. ;)


SiJack   (2003-04-24 11:36:00) [7]

cорри перепутал ДБ


Johnmen   (2003-04-24 11:35:00) [8]

>Orlan Master (24.04.03 11:28)

... [INNER] JOIN ...

Квадратные скобки означают умалчиваемый предикат...:)


SiJack   (2003-04-24 11:35:00) [9]

>sanbah
Почитай Jetsql40.chm


Zacho   (2003-04-24 11:34:00) [10]


> Orlan Master (24.04.03 11:28)

В IB JOIN это и есть INNER JOIN, так что без разницы


D   (2003-04-24 11:34:00) [11]

Свяжется, не спорю :)

НО Если окажется, что для какого-то изделия затраты во 2 таблице не заданы, то это изделие просто не попадет в запрос.
Правда, неизвестно, есть ли такие записи(не имеющие подчиненн.), и что нужно в этом случае получить.


Orlan Master   (2003-04-24 11:28:00) [12]

>Johnmen ©
>SELECT M.Name,M.Doxod,SUM(D.Zatrati) FROM Table1 M
> !INNER! JOIN Table2 D ON D.Id_1tabl=M.Id
>GROUP BY M.Name,M.Doxod
может быть с этим пойдет лучше?

> D
Нафига такие кроссы с "LEFT OUTER JOIN"? все слишком просто, запросто вяжется с inner join



Johnmen   (2003-04-24 11:23:00) [13]

>sanbah (24.04.03 10:49)
>Что то этот запрос не хочет работать

Как это видно ?

>D (24.04.03 11:20)

Даже пробовать не стОит...:) Ошибок много...



D   (2003-04-24 11:20:00) [14]

А что пишет?

Попробуйте то же самое, но с именами таблиц целиком:
select table1.id, table1.name, table1.doxod, sum(table2.zatraty) from Table1 LEFT OUTER JOIN table2 on table1.id = table2.id_1tabl group by table1.id


sanbah   (2003-04-24 10:49:00) [15]

Что то этот запрос не хочет работать


Johnmen   (2003-04-24 09:44:00) [16]

SELECT M.Name,M.Doxod,SUM(D.Zatrati) FROM Table1 M
JOIN Table2 D ON D.Id_1tabl=M.Id
GROUP BY M.Name,M.Doxod


Наверх

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