Форум: "Базы";
Текущий архив: 2003.05.15;
Скачать: [xml.tar.bz2];
ВнизСвязанные таблицы Найти похожие ветки
← →
sanbah (2003-04-24 09:34) [0]Помогите решть следующую задачу
Есть две связанные таблицы
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
← →
Johnmen (2003-04-24 09:44) [1]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
← →
sanbah (2003-04-24 10:49) [2]Что то этот запрос не хочет работать
← →
D (2003-04-24 11:20) [3]А что пишет?
Попробуйте то же самое, но с именами таблиц целиком:
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
← →
Johnmen (2003-04-24 11:23) [4]>sanbah (24.04.03 10:49)
>Что то этот запрос не хочет работать
Как это видно ?
>D (24.04.03 11:20)
Даже пробовать не стОит...:) Ошибок много...
← →
Orlan Master (2003-04-24 11:28) [5]>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
← →
Zacho (2003-04-24 11:34) [6]
> Orlan Master (24.04.03 11:28)
В IB JOIN это и есть INNER JOIN, так что без разницы
← →
D (2003-04-24 11:34) [7]Свяжется, не спорю :)
НО Если окажется, что для какого-то изделия затраты во 2 таблице не заданы, то это изделие просто не попадет в запрос.
Правда, неизвестно, есть ли такие записи(не имеющие подчиненн.), и что нужно в этом случае получить.
← →
Johnmen (2003-04-24 11:35) [8]>Orlan Master (24.04.03 11:28)
... [INNER] JOIN ...
Квадратные скобки означают умалчиваемый предикат...:)
← →
SiJack (2003-04-24 11:35) [9]>sanbah
Почитай Jetsql40.chm
← →
SiJack (2003-04-24 11:36) [10]cорри перепутал ДБ
← →
Orlan Master (2003-04-24 11:38) [11]>D
А правила обязательного наличия значения задаются на уровне аттрибута сущности. А их вроде как не огласили. Согласен, что такой запрос в качестве отладочного для проверки наличия null-евых записей через OUTER JOIN в самый раз. ;)
← →
MsGuns (2003-04-24 12:27) [12]SELECT M.Name, M.Doxod, SUM(D.Zatrati) [as AllCost]
FROM Table1 M, Table2 D
WHERE D.Id_1tabl=M.Id
На фига JOIN там, где он в принципе не нужен ? Ведь в детале нет записей с указателем, отсутствующем в Мастере. А если даже и есть (суть нарушение целостности), то для данного запроса (итого по столам, т.е. ключам Мастера) они и на фиг не нужны.
← →
sanbah (2003-04-24 13:56) [13]>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 ошибка таже
← →
Johnmen (2003-04-24 14:13) [14]Как уже было сказано нужен 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
← →
MsGuns (2003-04-24 16:11) [15]>sanbah (24.04.03 13:56)
>SELECT M.Name, M.Doxod, SUM(D.Zatrati) [as AllCost]
Что, прям так и всобачил ? Вместе с моими примечаниями об именовании динамически образуемых полей ?
>Johnmen © (24.04.03 14:13)
Не очень внимательно проглядел схему данных ;(( Если в детале может не быть вообще записей по какой-то мастер-записи, а ее все же надо включать в рез.НД с пустотами вместо цифири, то тогда, конечно ;))
← →
sanbah (2003-04-24 22:07) [16]Всем спасибо все получилось через Left JOIN т.к. советовал Johnmen
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.05.15;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.012 c