![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Связанные таблицы [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