Форум: "Базы";
Текущий архив: 2004.09.05;
Скачать: [xml.tar.bz2];
Внизобъединение массивов данных??? Найти похожие ветки
← →
Алексей (2004-08-07 11:22) [0]Здравствуйте.
Использую в работе таблицы парадокс и эл-ты TTable.
При сканировании таблицы образуется набор итоговых данных, таких таблиц до 4, соответственно столько же и наборов. Как объеденить эти наборы на предмет общих данных. Множества позволяют накопить до 256 эл-тов, а там может быть и больше. Как быть?
Спасибо.
← →
Алексей (2004-08-07 15:15) [1]Наверно это трудно...
← →
Mike Kouzmine © (2004-08-07 16:47) [2]Вероятно, да! А что такое "эл-ты"? И вообще, попонятнее пожалуйста.
← →
Алексей (2004-08-07 18:01) [3]ок.
эл-ты это сокращенение элементы. позволил себе...
в общем, в процессе работы программы выполняется просмотр таблицы от начала до конца циклом. при совпадении определённого пользователем условия запоминается запись, а точнее данные о номере ключевого поля главной таблицы, сохранённый в просмотренной записи. в процессе просмотра растёт количество сохранённых ключей. таких таблиц просматривается несколько, в результате получается несколько наборов данных с сохранёнными ключами. их (записи о ключах) надо сравнить друг с другом и найти общие для всех таблиц ключи. потом отфильтровать по ним главную таблицу. Проблемма именно в сравнении.
если опять чего непонятно скажите, опыта у меня не много могу и запутать... :)
← →
сергей1 (2004-08-07 18:36) [4]да действительно непонятно, если правильно понял, то ситуация следующая : по определенным критериям отбираются записи из нескольких таблиц, затем из получившихся наборов делают один набор на основе совпадения ключей. Правда непонятно что такое "отфильтровать по ним главную таблицу".
Зачем здесь цикл ? Разве не проще использовать select * from Table1 where field1 = "some_value". Закинуть это все во временные таблицы, а затем выбрать нужные записи путем, например, if exists(). Т.е. берется первая запись из первой таблицы и подставляется в if exists() во всех остальных таблицах, если возращается true во всех случаях, значит берем эту запись и помещаем в окончательный набор данных (если конечно я правильно понял проблему)
← →
сергей1 (2004-08-07 20:06) [5]вот более хорошее решение, сразу в голову не пришло :
select Key_field1 from Table1 t1
inner join Table2 t2 on t1.Key_field1 = t2.Key_field2
inner join Table3 t3 on t3.Key_field3 = t2.Key_field2
этот запрос вернет поля Key_field1, Key_field2, Key_field3 имеющие одинаковые значения во всех трех таблицах.
Теперь можно делать таинственную фильтровку (подозреваю, что выборку полей, имеющих те-же ключевые поля, что вернул вышеуказанный запрос, то-есть тем-же самым inner join"ом)
← →
Алексей (2004-08-07 22:27) [6]уважаемый сергей1.
проблему вы поняли правильно. за термины извините, мало опыта, избретаю в процессе познавания.
>непонятно что такое "отфильтровать по ним главную таблицу".
просто сканируются подчинённые таблицы, а по результатам поиска и сравнения отбираются соответствующие записи в главной таблице.
если я использую TTable, то такие SQL запросы там не обрабатываются. нужно ииспользовать TQuery? а могут они одновременно в одном приложении работать или надо переделывать базу под этот компонент (или другой?)?
пардон за "ликбез" :).
← →
сергей1 (2004-08-08 09:33) [7]вообще, BDE является устаревшей технологией, и с нее надо сваливать, т.к. Borland отказалась от дальнейшей поддержки этой технологии. К сожалению, я работаю не с paradox"ом, так что не знаю, есть ли альтернатива BDE, вывеси вопрос в форуме, кто-нибудь ответит. Ну а TQuery ты конечно можешь использовать без кардинальной переделки базы. Вместо связки datasource -> ttable, используй datasource -> tquery, причем ты это можешь сделать программно на небольшой промежуток времени для выполнения запроса, а потом вернуть все назад (хотя это не есть хороший способ проектировать базы). В любом случае, я настоятельно рекомендую использовать SQL запросы вместо построчной обработки данных, т.к. в будушем останется один SQL, и ты со своими знаниями ttable никому не будешь нужен (кроме того, SQL всегда гораздо более производительный)
← →
Алексей (2004-08-08 22:20) [8]Спасибо. Будем работать...
← →
Германн © (2004-08-09 03:04) [9]2 сергей1 (08.08.04 09:33) [7]
> (кроме того, SQL всегда гораздо более производительный)
Вашими устами да мед пить!
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.09.05;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.035 c