powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Запрос из нескольких одинаковых таблиц
10 сообщений из 10, страница 1 из 1
Запрос из нескольких одинаковых таблиц
    #35144788
Добрый день.

В базе есть 15 таблиц, описывающих какие-то объекты. Все таблицы имеют примерно такую структуру:
Код: plaintext
1.
2.
3.
create table t1(
 id int,
 name varchar
)
Столбец id уникален для всех таблиц. Эта база используется как внешнее хранилище для одного приложения. То есть это приложение в своих внутренних структурах хранит все объекты, и при изменениях сохраняет в ту или иную таблицу.

Мне необходимо сделать примерно такой запрос:
select name from t1 where id=10
Но проблема в том, что этот id может быть в любой таблице. Сейчас приходится силами python перебирать все таблицы (select from t1, select from t2..) ища необходимую строку.

Можно ли как-то свести все эти таблицы в одно? Мне представляется отдельная таблица/view, которую тригерами обновлять, но я не знаю sybase, может есть какое-то более удобное средство?

Sybase ASE 12.0.
...
Рейтинг: 0 / 0
Запрос из нескольких одинаковых таблиц
    #35144897
antand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно попробовать через 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
...
Рейтинг: 0 / 0
Запрос из нескольких одинаковых таблиц
    #35145277
kolchanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UNION ALL не будет делать distinct....
...
Рейтинг: 0 / 0
Запрос из нескольких одинаковых таблиц
    #35145320
Kru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел Загребелин
Можно ли как-то свести все эти таблицы в одно? Мне представляется отдельная таблица/view, которую тригерами обновлять, но я не знаю sybase, может есть какое-то более удобное средство?

Sybase ASE 12.0.


На ум пришли 2 варианта:
1.
Так как ID уникален для всех таблиц, то чтобы каждый раз не "бегать" по всем таблицам можно создать отдельную таблицу-указатель в которой будут храниться имена 15 ти таблиц и хранящиеся в них ID.
На 15ти таблицах нужно создать триггеры на insert/delete (update - если ID разрешается обновлять) которые будут регистрировать изменения происходящие с ключами. Логика совсем не сложная.

2. для каждой из 15ти таблиц назначить диапозон ключей. Тогда будет очевидно в какой таблице искать.
...
Рейтинг: 0 / 0
Запрос из нескольких одинаковых таблиц
    #35145378
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А я бы просто сделал view.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
create view AllObjects as
  select 'table1' source_table, id, name from table1
  union
  select 'table2', id, name from table2
  union
  select 'table3', id, name from table3
  .... etc
go
...
Рейтинг: 0 / 0
Запрос из нескольких одинаковых таблиц
    #35145568
если ID уже определяет в какой таблице находится запись
например
t1 1-10000
t2 10001-20000
...

то можно создать одну таблицу ttt с указанной структурой
и 15 вьюшек типа
Код: plaintext
1.
create view t1 as
select * from ttt where ID>= 1  and ID< 10001 

во вьюшках созданных на основе одной таблицы можно менять данные.
реально данные будут меняться в одной таблице.

может принадлежность к той или иной таблице можно определять по какому-нибудь другому полю (не по ID).
...
Рейтинг: 0 / 0
Запрос из нескольких одинаковых таблиц
    #35145622
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
antand пишет:
> Можно попробовать через Union. В Sybase ASA можно так
>
> SELECT 't1' as source ,id, name
> FROM t1
> UNION

UNION ALL а не UNION.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Запрос из нескольких одинаковых таблиц
    #35145631
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
Запрос из нескольких одинаковых таблиц
    #35145956
Kru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос к автору - как наполняются эти 15 таблиц. Вы сказали что ключ уникален в рамках всех таблиц, а есть какое-нибудь правило в отношении раздачи ключей. Например ключи с 1 до 1999 в таблице 1, от 2000 до 2999 в таблицу 2 и.т.д.
Как вообще выбирается таблица для записи? Ведь у вас же не просто так 15 таблиц с одинаковой структурой.

Может быть Вам имеет смысл сделать отдельную таблицу которая будет хранить правила раздачи ключей. По ней вы и запросы сгеренить всегда сможете и не нужно будет возиться со сложными view со множественными union.

Постарайтесь с этой стороны на задачу посмотреть.
...
Рейтинг: 0 / 0
Запрос из нескольких одинаковых таблиц
    #35146159
Есть система управления какими-то телекоммуникационными штуками. В этих таблицах хранятся данные о платах, установленных в оборудовании. Все таблицы примерно одинаковы (есть обязательные поля: 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.

Похоже, я с самого начала неверно описал задачу. :-(
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Запрос из нескольких одинаковых таблиц
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]