Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
15-1193827892
Ega23
2007-10-31 13:51
2007.12.02
Народ, а никто случайно не знает, какой сейчас официальный


2-1194371274
Nucer
2007-11-06 20:47
2007.12.02
Сервер TCP, потоки


2-1194692484
GSC
2007-11-10 14:01
2007.12.02
Переименование ключа


11-1178296425
Vladimir Kladov
2007-05-04 20:33
2007.12.02
Версия 2.59


3-1184757227
Plm
2007-07-18 15:13
2007.12.02
Ошибка: Недостаточно сведений ключевого поля для обновления





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский