|
|
|
Запрос из нескольких одинаковых таблиц
|
|||
|---|---|---|---|
|
#18+
Добрый день. В базе есть 15 таблиц, описывающих какие-то объекты. Все таблицы имеют примерно такую структуру: Код: plaintext 1. 2. 3. Мне необходимо сделать примерно такой запрос: select name from t1 where id=10 Но проблема в том, что этот id может быть в любой таблице. Сейчас приходится силами python перебирать все таблицы (select from t1, select from t2..) ища необходимую строку. Можно ли как-то свести все эти таблицы в одно? Мне представляется отдельная таблица/view, которую тригерами обновлять, но я не знаю sybase, может есть какое-то более удобное средство? Sybase ASE 12.0. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2008, 15:20 |
|
||
|
Запрос из нескольких одинаковых таблиц
|
|||
|---|---|---|---|
|
#18+
Можно попробовать через Union. В Sybase ASA можно так SELECT 't1' as source ,id, name FROM t1 UNION SELECT 't2', id, name FROM t2 UNION SELECT 't3', id, name FROM t3 .......... В первом столбце будет источник записи Подробнее см. UNION operation в документации Sybase ASE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2008, 15:48 |
|
||
|
Запрос из нескольких одинаковых таблиц
|
|||
|---|---|---|---|
|
#18+
UNION ALL не будет делать distinct.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2008, 17:26 |
|
||
|
Запрос из нескольких одинаковых таблиц
|
|||
|---|---|---|---|
|
#18+
Павел Загребелин Можно ли как-то свести все эти таблицы в одно? Мне представляется отдельная таблица/view, которую тригерами обновлять, но я не знаю sybase, может есть какое-то более удобное средство? Sybase ASE 12.0. На ум пришли 2 варианта: 1. Так как ID уникален для всех таблиц, то чтобы каждый раз не "бегать" по всем таблицам можно создать отдельную таблицу-указатель в которой будут храниться имена 15 ти таблиц и хранящиеся в них ID. На 15ти таблицах нужно создать триггеры на insert/delete (update - если ID разрешается обновлять) которые будут регистрировать изменения происходящие с ключами. Логика совсем не сложная. 2. для каждой из 15ти таблиц назначить диапозон ключей. Тогда будет очевидно в какой таблице искать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2008, 17:37 |
|
||
|
Запрос из нескольких одинаковых таблиц
|
|||
|---|---|---|---|
|
#18+
А я бы просто сделал view. Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2008, 17:49 |
|
||
|
Запрос из нескольких одинаковых таблиц
|
|||
|---|---|---|---|
|
#18+
если ID уже определяет в какой таблице находится запись например t1 1-10000 t2 10001-20000 ... то можно создать одну таблицу ttt с указанной структурой и 15 вьюшек типа Код: plaintext 1. во вьюшках созданных на основе одной таблицы можно менять данные. реально данные будут меняться в одной таблице. может принадлежность к той или иной таблице можно определять по какому-нибудь другому полю (не по ID). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2008, 18:44 |
|
||
|
Запрос из нескольких одинаковых таблиц
|
|||
|---|---|---|---|
|
#18+
antand пишет: > Можно попробовать через Union. В Sybase ASA можно так > > SELECT 't1' as source ,id, name > FROM t1 > UNION UNION ALL а не UNION. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2008, 19:01 |
|
||
|
Запрос из нескольких одинаковых таблиц
|
|||
|---|---|---|---|
|
#18+
White Owl пишет: > Автор: "White Owl" > А я бы просто сделал view. > > create view AllObjects as > select \'table1\' source_table, id, name from table1 > union > select \'table2\', id, name from table2 И получил бы геморой с производительнстью ? Надо как минимум заменит UNION на UNION ALL, и то возможно его сервак потом не "пробьет" - не спустит условие вниз. Честно говоря, не знаю, как в этом случае поступит ASE. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2008, 19:04 |
|
||
|
Запрос из нескольких одинаковых таблиц
|
|||
|---|---|---|---|
|
#18+
Вопрос к автору - как наполняются эти 15 таблиц. Вы сказали что ключ уникален в рамках всех таблиц, а есть какое-нибудь правило в отношении раздачи ключей. Например ключи с 1 до 1999 в таблице 1, от 2000 до 2999 в таблицу 2 и.т.д. Как вообще выбирается таблица для записи? Ведь у вас же не просто так 15 таблиц с одинаковой структурой. Может быть Вам имеет смысл сделать отдельную таблицу которая будет хранить правила раздачи ключей. По ней вы и запросы сгеренить всегда сможете и не нужно будет возиться со сложными view со множественными union. Постарайтесь с этой стороны на задачу посмотреть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2008, 23:17 |
|
||
|
Запрос из нескольких одинаковых таблиц
|
|||
|---|---|---|---|
|
#18+
Есть система управления какими-то телекоммуникационными штуками. В этих таблицах хранятся данные о платах, установленных в оборудовании. Все таблицы примерно одинаковы (есть обязательные поля: board id, board type, s/n, pid=id оборудования), но разные типы плат лежат в разных таблицах. Сервер управления при изменениях в платах добавлят\изменяет строки в эти таблицы. Если сделать update при запущенном сервере, то эти изменения никак не отразятся на его работе. Есть таблица firmware_version, в которой лежит информиация о firmware в платах (board id, firmware ver). Мне необходим отчёт вида "в какой железке какие платы стоят и версии этих плат". Сейчас я питоном выбираю список железяк, из 15 таблиц выбираю все платы, выбираю все firmware и в цикле делаю нужный подбор. А хотелось всё сделать одним запросом с двумя join'ами. Способ с view и union идеально подходит, но поддержка union в view появилась в ASE 12.5, а у меня 12.0. Похоже, я с самого начала неверно описал задачу. :-( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2008, 08:12 |
|
||
|
|

start [/forum/topic.php?fid=55&fpage=54&tid=2011703]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
51ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 198ms |
| total: | 335ms |

| 0 / 0 |
