Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.12.02;
Скачать: CL | DM;

Вниз

SQL запрос к двум таблицам.   Найти похожие ветки 

 
NewZ ©   (2007-07-20 23:24) [0]

Уважаемые Господа!!! Помогите!!!
Есть 2 таблицы:
Первая - поставки материалов на склад:
дата_поставки
наименование_материала
количество

Вторая - уход материалов со склада:
дата_ухода
наименование_материала
количество

Как SQL запросом вычислить остаток:
наименование_материала
количество


 
Anatoly Podgoretsky ©   (2007-07-20 23:28) [1]

> NewZ  (20.07.2007 23:24:00)  [0]

t1.количество - t2.количество


 
NewZ ©   (2007-07-20 23:42) [2]

>Anatoly Podgoretsky ©   (20.07.07 23:28) [1]

t1.количество - t2.количество

А где здесь SQL???


 
Anatoly Podgoretsky ©   (2007-07-21 00:18) [3]

> NewZ  (20.07.2007 23:42:02)  [2]

Это его часть, которая вычисляет остаток.


 
NewZ ©   (2007-07-21 00:47) [4]


>Anatoly Podgoretsky ©   (21.07.07 00:18) [3]

>Это его часть, которая вычисляет остаток.

Это мы и так знаем. На калькуляторе 2 + 2 складывать умеем.
А вот SQL не очень.
Там нужно условие WHERE. А что там писать???

SELECT t1.наименование_материала, SUM(t1.количество - t2.количество)
FROM t1, t2
WHERE t1.наименование_материала = t2.наимеование_материала
GROUP BY t1.наимеование_материала

Но тогда в результирующей таблице будут только те наименования,
которые есть в t2. А если в t1 есть те материалы, которые привезли,
но еще не списали.

P.S. кстати вон та часть, которая вычисляет количество (первая строка SELECT...)


 
Anatoly Podgoretsky ©   (2007-07-21 01:08) [5]

> NewZ  (21.07.2007 00:47:04)  [4]

Восспользуйся спрвкой по твоему серверу.
И используй JOIN если оно это поддерживает.


 
NewZ ©   (2007-07-21 01:25) [6]

JOIN если не ошибаюсь, то же самое, что и UNION.

А UNION просто объеденяет два и более запросов. Но если
в таблицах есть одинаковые строки (например наименование_материала),
то в рез. таблице они дублируются, чего не должно быть!!!

База данных MSAccess. Использую TADOConnection, две TADOTable и
TADOQuery, куда и хочу поместить запрос.


 
sniknik ©   (2007-07-21 09:08) [7]

> JOIN если не ошибаюсь, то же самое, что и UNION.
ошибаешься, и в справке это написано.
в принципе твой запрос в [4] использует обьеденение типа join только неявное.
единственное, что тебе его надо переделать в явную форму и использовать jeft join(/right) чтобы оставить все записи в одной из таблиц.
ну и перед тем как отнять надо будет проверить на null значение и подменить но 0 (iff) т.к. операция с null даст null в сумме (значения null будут в тех местах где не совпадет условие where).

> Использую TADOConnection, две TADOTable и TADOQuery, куда и хочу поместить запрос.
уверен? с TADOTable это будет "немного" через задницу... возможно, но... зачем?
для запросов пользуйся родными для ADO компонентами (TADODataSet, TADOCommand), остальные нафиг.


 
Anatoly Podgoretsky ©   (2007-07-21 11:26) [8]


> JOIN если не ошибаюсь, то же самое, что и UNION.

JOIN соединяет поля из разных таблиц
UNION объединяет строки из разных запросов

Тебе нужен правильный JOIN - их не одно штук, Акцесс поддерживает минимум три.


 
Anatoly Podgoretsky ©   (2007-07-21 11:38) [9]

У тебя еще возникнет проблема из-за отсутствия функций преобразования null -> 0 в Акцесс

SUM(t1.количество - null) даст null, а не t1.количество


 
Stanislav ©   (2007-07-24 13:42) [10]

Вобще в access есть конструктор, причем на русском языке, где это сделать без проблем.


 
SS_   (2007-07-24 20:19) [11]

select a.наименование_материала, sum(a.количество-b.количество) as разность
from Первая таблица a, Вторая таблица b
where a.наименование_материала=b.наименование_материала
group by a.наименование_материала
union
select a.наименование_материала, a.количество as разность
from Первая таблица a
where a.наименование_материала not in (select b.наименование_материала
from Вторая таблица b)


 
SS_   (2007-07-24 20:23) [12]

вначале немного намутил...

select a.наименование_материала, a.количество-sum(b.количество) as разность
from Первая таблица a, Вторая таблица b
where a.наименование_материала=b.наименование_материала
group by a.наименование_материала
union
select a.наименование_материала, a.количество as разность
from Первая таблица a
where a.наименование_материала not in (select b.наименование_материала
from Вторая таблица b)


 
MsGuns ©   (2007-07-24 23:50) [13]

>Stanislav ©   (24.07.07 13:42) [10]
>Вобще в access есть конструктор, причем на русском языке, где это сделать без проблем.

Я бы не был столь категоричен. Вообще, мелкомягкие "волшебники" и "мастера" - мгко говоря, фуфло голимое ;)

По сабжу.
Начинать надо не с "эскюэля", а с основ построения БД, в частности с нормализации и понятия связывания таблиц. Тогда таких уродливых "чрезодноместных" проблем возникать не будет.


 
Кщд ©   (2007-07-25 11:19) [14]

MsGuns ©   (24.07.07 23:50) [13]
безусловно согласен
но, увы, не знаю ни одной компании, где бы новому сотруднику без опыта выдавали список обязательной к прочтению литературы и без этого самого ознакомления с т.н. "истоками" не подпускали бы к СУБД
оговорюсь, что вовсе не утверждаю, будто таких контор не существует
но на мой взгляд, это, скорее, исключение, правило подтверждающее


 
beg   (2007-07-25 11:22) [15]

>SS_   (24.07.07 20:23) [12]

> select a.наименование_материала, a.количество-sum(b.количество)
> as разность
> from Первая таблица a, Вторая таблица b
> where a.наименование_материала=b.наименование_материала
> group by a.наименование_материала

Access позволяет подобную группировку?



Страницы: 1 вся ветка

Текущий архив: 2007.12.02;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.023 c
15-1193827892
Ega23
2007-10-31 13:51
2007.12.02
Народ, а никто случайно не знает, какой сейчас официальный


15-1193238690
Рекрутер
2007-10-24 19:11
2007.12.02
Программист-пенсионер - кто он?


2-1194502707
Slim
2007-11-08 09:18
2007.12.02
Функции работы со строковыми типами в Delphi


15-1193973030
Slider007
2007-11-02 06:10
2007.12.02
С днем рождения ! 2 ноября 2007 пятница


15-1193680169
SQL555
2007-10-29 20:49
2007.12.02
Проблема с процедурой SQL