Форум: "Базы";
Текущий архив: 2007.12.02;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.045 c