powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / немогу построить простой запрос
6 сообщений из 6, страница 1 из 1
немогу построить простой запрос
    #35449114
zloyGamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вообщем нужно выбрать одну фамилию и суммы связанные с этой фамилией из 2х других таблиц
следующий запрос перебирает все комбинации записей из tbZarpl и tbPay с одинаковыми idfio:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
SELECT   f.idfio,  f.fio,  SUM(z.zarpl),  SUM(p.pay)
FROM 
  tbFio f LEFT JOIN tbZarpl z ON z.idfio=f.idfio
          LEFT JOIN tbPay p ON p.idfio=f.idfio
WHERE f.idFio= 1 
GROUP BY   f.fio,f.idfio
;
мне не нужны суммы этих комбинаций, мне нужны просто суммы полей
как еслибы я делал:
Код: plaintext
1.
2.
3.
4.
SELECT   f.idfio,  f.fio,  SUM(z.zarpl)
FROM 
  tbFio f LEFT JOIN tbZarpl z ON z.idfio=f.idfio
WHERE f.idFio= 1 
GROUP BY   f.idfio,f.fio
и
Код: plaintext
1.
2.
3.
4.
SELECT   f.idfio,  f.fio,  SUM(p.pay)
FROM 
  tbFio f LEFT JOIN tbPay p ON p.idfio=f.idfio
WHERE f.idFio= 1 
GROUP BY   f.idfio,f.fio

подскажите пожалуста, чет совсем не дружу с SQL'ем (
...
Рейтинг: 0 / 0
немогу построить простой запрос
    #35449239
Код: plaintext
1.
2.
3.
4.
5.
6.
SELECT  f.idfio  ;
           ,f.fio    ;
           ,(select SUM(z.zarpl) from tbZarpl z where z.idfio=f.idfio) ;
           ,(select SUM(p.pay) from tbPay p where p.idfio=f.idfio) ;
FROM tbFio f  ;
WHERE f.idFio= 1 
...
Рейтинг: 0 / 0
немогу построить простой запрос
    #35449587
zloyGamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо тебе заяц, но я думаю с под запросами я бы и сам решил эту задачу,
тут проблема в том что я непонимаю как тут обойтись одним запросом, возможно что то не так с группировками?
...
Рейтинг: 0 / 0
немогу построить простой запрос
    #35450051
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты вообще-то представляешь как работает объединение по JOIN?

В качестве модели можно представить себе такую схему:

1. Берется первая запись из первой таблицы
2. Берется первая запись удовлетворяющая условию объединения из второй таблицы по значению текущей записи первой таблицы
3. Берется первая запись удовлетворяющая условию объединениа из третьей таблицы по значению текущих записей первой и второй таблиц (сопоставлена с первой записью из второй таблицы)
4. Берется вторая запись удовлетворяющая условию объединения из третьей таблицы по значению текущих записей первой и второй таблиц (также сопоставлена с первой записью из второй таблицы)
5...

Когда закончились записи удовлетворяющие условию объединения в третьей таблице по текущем записям первой и второй таблицы берем вторую запись из второй таблицы и повторяем цикл

Грубо говоря, это можно представить как вложенные циклы перебора всех записей по каждой таблице. Внешний цикл - перебор записей по первой таблице, в него вложен цикл перебора записей по второй таблице, а еще глубже вложен цикл перебора записей по третьей таблице.

Предположим, в таблице tbZarpl есть 2 записи с кодом idfio = 1, а в таблице tbPay есть 3 записи с кодом idfio = 1.

В результате, для idfio = 1 получим 2*3 = 6 записей в результирующей выборке. Потом выполняется суммирование по этим 6 записям.

Другими словами, каждую запись из таблицы tbZarpl ты используешь столько раз, сколько записей с тем же значением idfio есть в таблице tbPay и наоборот.

LEFT JOIN, в данном случае, мало что изменит. Оно определяет поведение только в том случае, когда для указанного значения idfio нет записей в таблицах tbZarpl или tbPay.

Поэтому, без подзапросов данная задача не решается.
...
Рейтинг: 0 / 0
немогу построить простой запрос
    #35450091
вот еще вариант, если уж так хочется приджоинить
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
local lnId
lnId =  1 
SELECT  f.idfio,  f.fio,  z.zarpl, p.pay ;
FROM tbFio f ;
     left JOIN (select SUM(zarpl) as zarpl from tbZarpl where idfio=lnId) z ON .t. ;
     left JOIN (select SUM(pay)   as pay   from tbPay  where idfio=lnId) p ON .t. ;
 WHERE f.idFio=lnId
...
Рейтинг: 0 / 0
немогу построить простой запрос
    #35456099
beginner__fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
zloyGamerвообщем нужно выбрать одну фамилию и суммы связанные с этой фамилией из 2х других таблиц
следующий запрос перебирает все комбинации записей из tbZarpl и tbPay с одинаковыми idfio:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
SELECT   f.idfio,  f.fio,  SUM(z.zarpl),  SUM(p.pay)
FROM 
  tbFio f LEFT JOIN tbZarpl z ON z.idfio=f.idfio
          LEFT JOIN tbPay p ON p.idfio=f.idfio
WHERE f.idFio= 1 
GROUP BY   f.fio,f.idfio
;


А результата запроса привести можете?
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / немогу построить простой запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]