Роберт
Аналитик
альтернатива union
А есть ли какая-то альтернатива union-запросам , когда надо вытащить одну строчку лежащую в какой-то из нескольких десятков полностью одинаковых таблиц по полностью одинаковому запросу. Чисто из экономии длинны запроса.
Ну типа вместо:
select *
from Arhiv_2009_06
where Login='-' and Tip='x' and Vid=1 and (Dostup='z1' or Prava='z*') and ......... and Karta between 3 and 12
UNION
select *
from Arhiv_2009_05
where Login='-' and Tip='x' and Vid=1 and (Dostup='z1' or Prava='z*') and ......... and Karta between 3 and 12
UNION
select *
from Arhiv_2009_04
where Login='-' and Tip='x' and Vid=1 and (Dostup='z1' or Prava='z*') and ......... and Karta between 3 and 12
UNION
...
UNION
select *
from Arhiv_2007_01
where Login='-' and Tip='x' and Vid=1 and (Dostup='z1' or Prava='z*') and ......... and Karta between 3 and 12
Вот вместо этого чтобы можно было бы использовать что-то вроде:
select *
from TableUnion(Arhiv_2007_01, Arhiv_2007_02, Arhiv_2007_03, ... , Arhiv_2009_06)
where Login='-' and Tip='x' and Vid=1 and (Dostup='z1' or Prava='z*') and ......... and Karta between 3 and 12
Ясное дело никакого TableUnion несуществует , но может есть чтото типа этого чтобы типа указать перечень таблиц в которых искать.
А есть ли какая-то альтернатива union-запросам , когда надо вытащить одну строчку лежащую в какой-то из нескольких десятков полностью одинаковых таблиц по полностью одинаковому запросу. Чисто из экономии длинны запроса.
Ну типа вместо:
select *
from Arhiv_2009_06
where Login='-' and Tip='x' and Vid=1 and (Dostup='z1' or Prava='z*') and ......... and Karta between 3 and 12
UNION
select *
from Arhiv_2009_05
where Login='-' and Tip='x' and Vid=1 and (Dostup='z1' or Prava='z*') and ......... and Karta between 3 and 12
UNION
select *
from Arhiv_2009_04
where Login='-' and Tip='x' and Vid=1 and (Dostup='z1' or Prava='z*') and ......... and Karta between 3 and 12
UNION
...
UNION
select *
from Arhiv_2007_01
where Login='-' and Tip='x' and Vid=1 and (Dostup='z1' or Prava='z*') and ......... and Karta between 3 and 12
Вот вместо этого чтобы можно было бы использовать что-то вроде:
select *
from TableUnion(Arhiv_2007_01, Arhiv_2007_02, Arhiv_2007_03, ... , Arhiv_2009_06)
where Login='-' and Tip='x' and Vid=1 and (Dostup='z1' or Prava='z*') and ......... and Karta between 3 and 12
Ясное дело никакого TableUnion несуществует , но может есть чтото типа этого чтобы типа указать перечень таблиц в которых искать.