Вниз
Скачать: CL | DM;

Выборка из нескольких таблиц.   Найти похожие ветки 

← →
Becket ©   (2003-02-20 22:42) [0]

Наверняка вопрос очень простой, но для меня актуальный.
Есть несколько таблиц (5), выбираю из низ необходимые данные, из каждой. Затем нужно свести их в один отчет, по совпадающим ключевым полям.
Не могу догнать, как оптимизировать этот процесс.
У меня получается очень долго.
Какой алгоритм посоветуете?


← →
KIR ©   (2003-02-20 22:56) [1]

Какой СУБД пользуешься?
Долого, это сколько?


← →
Becket ©   (2003-02-20 23:42) [2]

MySQL
Минут 5-7.


← →
Johnmen ©   (2003-02-20 23:48) [3]

А как выглядит сам процесс ? :)


← →
Becket ©   (2003-02-20 23:59) [4]

Ну примерно вот так :)

procedure TForm1.Table1CalcFields(DataSet: TDataSet);
begin
Query1.SQL.Clear;
Query1.SQL.Add("select distinct code, sum(quant) from tbl1 where code="+QuotedStr(Table1code.Value)+" group by code");
Query1.Open;
Table1f1.Value:=Query1sumquant.AsInteger;
Query1.SQL.Clear;
Query1.SQL.Add("select distinct code, sum(quant) from tbl2 where code="+QuotedStr(Table1code.Value)+" group by code");
Query1.Open;
Table1f2.Value:=Query3sumquant.AsInteger;
Query1.SQL.Clear;
Query1.SQL.Add("select distinct code, sum(quant) from tbl3 where code="+QuotedStr(Table1code.Value)+" group by code");
Query1.Open;
Table1f3.Value:=Query2sumquant.AsInteger;
Table1f4.Value:=Table1f1.Value-Table1f2.Value+Table1f3.Value;
end;



← →
AM   (2003-02-20 23:59) [5]

Если это запрос типа "SELECT ..."
Таблиц не более 5-ти.
Из твоих слов понятно, что вложенность запросов не совсем большая...
5-7 минут - это очень много, если конечно у тебя количество строк в таблицах не по несколько сотен тысяч, количество столбцов несколько сотен и процессор какой-нибудь Pentium-166.

Попробуй перезагрузи компьютер и/или сервер...


← →
AM   (2003-02-21 00:07) [6]

А я думал у тебя идет один запрос...

Я не знаю MySQL, но если он поддерживает вложенные запросы и
" UNION ALL " то все что ты делаешь можно сделать с помощью одного запроса...


← →
Johnmen ©   (2003-02-21 00:07) [7]

1. distinct здесь неуместен
2.
select
code,
sum(tbl1.quant),
sum(tbl2.quant),
sum(tbl3.quant),
from tbl1, tbl2, tbl3
where (tbl1.code=tbl2.code) and (tbl1.code=tbl3.code) and
(code=...)
....


← →
Becket ©   (2003-02-21 00:57) [8]

2 Johnmen
По времени одинаково выходит.


2 AM
Вообще MySQL пока не поддерживает UNION :(
Но общают когда-нибудь сделать :)

2 All
Спасибо, видимо, придется пока остаться при своем...


← →
fidget ©   (2003-02-21 13:33) [9]

> Вообще MySQL пока не поддерживает UNION :(
> Но общают когда-нибудь сделать :)

они сделали это больше года назад в 4.0

как насчет индексов? они есть? используются?



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

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.01 c
7-39614
Сержик
2003-01-20 08:42
2003.03.13
Как удалить всё с дискеты?


14-39512
MihalochMK
2003-02-25 14:52
2003.03.13
Помогите пожалуйста!


7-39588
Guk
2003-01-16 13:41
2003.03.13
Эмуляция DOS


3-39188
Becket
2003-02-20 22:42
2003.03.13
Выборка из нескольких таблиц.


14-39576
RV
2003-02-27 08:40
2003.03.13
кто быстрее раскусит :)




   Наверх