Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Вопрос о нетрадиционном использовании секции From  [new]
ef1
Member

Откуда: Москва
Сообщений: 191
спрашивал здесь
https://www.sql.ru/forum/1169669/sekciya-from-v-zaprose-neskolko-tablic-cherez-simvol-podstanovki
и здесь спрошу в плане может подскажите идею

читаю БД mySQL станции IP телефонии
до обновления версии прошивки станции они поддерживали только одну таблицу с данными
cdr
после обновления они стали на каждый месяц создавать новые таблицы
cdr_201508
и т.д. очевидно

подскажите пожалуйста есть какой либо способ в одном запросе указать выборку из всех таблиц типа from like 'cdr%' ?
(чтобы не модифицировать запрос помесячно)
или может через функции... в голову ничего не приходит
7 авг 15, 11:04    [17987744]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о нетрадиционном использовании секции From  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
ef1
читаю БД mySQL станции IP телефонии
MySQL - это в другом форуме
7 авг 15, 11:09    [17987768]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о нетрадиционном использовании секции From  [new]
ef1
Member

Откуда: Москва
Сообщений: 191
да я понимаю - я за идеей
7 авг 15, 11:11    [17987785]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о нетрадиционном использовании секции From  [new]
komrad
Member

Откуда:
Сообщений: 5758
ef1
или может через функции... в голову ничего не приходит


views & union all вам поможет
7 авг 15, 11:13    [17987792]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о нетрадиционном использовании секции From  [new]
Glory
Member

Откуда:
Сообщений: 104751
ef1
да я понимаю - я за идеей

Нет синтаксиса выбирающего сразу из всех таблиц.
Делают одну таблицу, которую секционируют.
7 авг 15, 11:14    [17987800]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о нетрадиционном использовании секции From  [new]
dvim
Member

Откуда: Санкт Петербург
Сообщений: 711
В свое время нашел (может и здесь) код, который ищет текст по всем таблицам.

set nocount on
declare @name varchar(128), @substr nvarchar(4000), @column varchar(128)
set @substr = '%searchTEXT%' --фрагмент строки, который будем искать

create table #rslt 
(table_name varchar(128), field_name varchar(128), value ntext)

declare s cursor for select table_name as table_name from information_schema.tables where table_type = 'BASE TABLE' order by table_name
open s
fetch next from s into @name
while @@fetch_status = 0
begin
 declare c cursor for 
     select quotename(column_name) as column_name from information_schema.columns 
       where data_type in ('text', 'ntext', 'varchar', 'char', 'nvarchar', 'char', 'sysname') and table_name  = @name
 set @name = quotename(@name)
 open c
 fetch next from c into @column
 while @@fetch_status = 0
 begin
   print 'Processing table - ' + @name + ', column - ' + @column
   exec('insert into #rslt select ''' + @name + ''' as Table_name, ''' + @column + ''', ' + @column + 
     ' from' + @name + ' where ' + @column + ' like ''' + @substr + '''')
   fetch next from c into @column
 end
 close c
 deallocate c
 fetch next from s into @name
end
select table_name as [Table Name], field_name as [Field Name], count(*) as [Found Mathes] from #rslt
group by table_name, field_name
order by table_name, field_name
--Если нужно, можем отобразить все найденные значения
--select * from #rslt order by table_name, field_name
drop table #rslt
close s
deallocate s
7 авг 15, 11:25    [17987873]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о нетрадиционном использовании секции From  [new]
ef1
Member

Откуда: Москва
Сообщений: 191
ясно, спасибо - и еще вопрос а в секцию From можно ли поставить переменную? @таблица_год_месяц
(и сделать рекурсивный или любой обход всех нужных таблиц)...
если нет...

то остаются только динамические запросы (тем более что запрос идет через ADO)
в принципе все наверно понял

спасибо!
7 авг 15, 11:28    [17987911]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о нетрадиционном использовании секции From  [new]
Glory
Member

Откуда:
Сообщений: 104751
ef1
ясно, спасибо - и еще вопрос а в секцию From можно ли поставить переменную? @таблица_год_месяц
(и сделать рекурсивный или любой обход всех нужных таблиц)...
если нет...

Нельзя.
За ошибки проектированя придется платить кодом.
7 авг 15, 11:45    [17988036]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о нетрадиционном использовании секции From  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31983
Glory
Нельзя.
А может, и можно :-)
Человек же спрашивает про mySQL

ef1
да я понимаю - я за идеей
Идея - не делать таблицы вида cdr_201508

А для получения помощи по возможностям конктерной СУБД, синтаксису её диалекта SQL, нужно обратиться в форум по этой СУБД.
7 авг 15, 12:04    [17988170]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о нетрадиционном использовании секции From  [new]
komrad
Member

Откуда:
Сообщений: 5758
alexeyvg

ef1
да я понимаю - я за идеей
Идея - не делать таблицы вида cdr_201508

Коллеги, в чем смысл пенять на архитектуру базы и говорить автору "а вот не надо так делать!", к которой он не имеет никакого отношения?
Уже не первый раз вижу, понимаю, что говорить такое сладко, но смысла в этом не вижу никакого.

Автору надо как-то обыграть данность, а не узнать про ошибки проектирования другого дяди.
7 авг 15, 12:18    [17988280]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о нетрадиционном использовании секции From  [new]
ef1
Member

Откуда: Москва
Сообщений: 191
)) спасибо!

ps
думаю решу проблему
самое главное что есть такой форум!!!!!!

off
закрываем тему
7 авг 15, 12:29    [17988383]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о нетрадиционном использовании секции From  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31983
komrad
Автору надо как-то обыграть данность, а не узнать про ошибки проектирования другого дяди.
Ну вот, автору и указали на конкретное решение - спросить на форуме по MySql.
Может, там можно таблицу как переменную с именем указать?

И повлиять на исправление ошибок другого дяди тоже иногда можно.

В сиквеле тоже есть разные варианты решения подобных задач, но тут про них не имеет смысла говорить, вопрос же не по сиквелу.
7 авг 15, 12:38    [17988462]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о нетрадиционном использовании секции From  [new]
ef1
Member

Откуда: Москва
Сообщений: 191
off
худшие опасения оправдались - разработчики пошли по пути месячных таблиц

К сообщению приложен файл. Размер - 37Kb
1 сен 15, 09:43    [18093933]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о нетрадиционном использовании секции From  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21249
ef1
есть какой либо способ в одном запросе указать выборку из всех таблиц типа from like 'cdr%' ?

Следует с использованием MERGE Storage Engine создать объединяющую надтаблицу и обращаться с выборками именно к ней.

ef1
(чтобы не модифицировать запрос помесячно)

Следует с помощью CREATE EVENT создать запланированное задание, модифицирующее надтаблицу и добавляющее в неё ещё одну таблицу, созданную в новом месяце.
1 сен 15, 09:53    [18093959]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о нетрадиционном использовании секции From  [new]
ef1
Member

Откуда: Москва
Сообщений: 191
вот это ответ!!!
СПАСИБО!!! большое - пошел разрабатывать!!
1 сен 15, 09:57    [18093971]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о нетрадиционном использовании секции From  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21249
ef1
вот это ответ!!!
Ну так в следующий раз следи за руками и размещай тему в правильном разделе.
1 сен 15, 10:00    [18093986]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о нетрадиционном использовании секции From  [new]
Jaffar
Member

Откуда:
Сообщений: 633
Akina,

можно сделать job который будет запускаться раз в ....
и будет динамически пересобирать View вида

alter view v_Table
AS (
select 'Table1', t.* from Table1
union all
select 'Table2', t.* from Table2
.....
select 'TableN', t.* from TableN)

как-то так
1 сен 15, 11:36    [18094387]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о нетрадиционном использовании секции From  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21249
Jaffar, Вы просмотрели важный момент - ТС работает не с MS SQL, а с MySQL. Он просто ошибся веткой форума.
И я совсем даже не убеждён, что сервер сумеет при выполнении запроса с использованием такого вьюва (с UNION внутри) обойтись без его материализации.
1 сен 15, 12:35    [18094757]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о нетрадиционном использовании секции From  [new]
Makar4ik
Member

Откуда: Когда-то были Лужки, а теперь Бордюр-Сити.
Сообщений: 2680
ef1,
select @code = 'create view v_cdr as
select field from cdr
union all
select field from cdr_201508
union all
...'
exec @code
select * from v_cdr --ну прям так в лоб - накладно, но идею я подкинул :)
4 сен 15, 00:16    [18106062]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о нетрадиционном использовании секции From  [new]
Makar4ik
Member

Откуда: Когда-то были Лужки, а теперь Бордюр-Сити.
Сообщений: 2680
Jaffar,

Эх, сорри, поторопился с ответом, не дочитав.
4 сен 15, 00:21    [18106069]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о нетрадиционном использовании секции From  [new]
Call_me_gosu
Member

Откуда:
Сообщений: 72
Makar4ik,

select table_name from information_schema.tables
where table_name like ' cdr%'

дальше сформировать запрос текстовой переменной и запустить при помощи exec.
4 сен 15, 15:43    [18109365]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о нетрадиционном использовании секции From  [new]
Call_me_gosu
Member

Откуда:
Сообщений: 72
Call_me_gosu,
Прощу прощения, ef1 а не Makar4ik
4 сен 15, 15:44    [18109374]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о нетрадиционном использовании секции From  [new]
edyaN
Member

Откуда: Berlin
Сообщений: 185
ef1
off
худшие опасения оправдались - разработчики пошли по пути месячных таблиц


ну это не самое плохое решение. У нас через день создаются таблицы для cdrs с астерисков.
Вообще есть несколько решений. Например:
- сделай въю
- програмно создавай запрос
- регулярно экспортируй все данные в другую базу и там складывай все как хочешь.
- астериск может писать cdr в csv файлы. посмотри, может тебе будет проще с ними работать.
4 сен 15, 18:54    [18110772]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о нетрадиционном использовании секции From  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21249
UNION в условиях MySQL (модератор когда-нить перенесёт топик или нет?) - плохое решение, причём вне зависимости от того, как его использовать - статикой, динамикой или вьювом.
MERGE - получше.
Но оптимально, если софт позволяет заранее создавать для него эти помесячные таблицы - партиционирование по дате с предварительным созданием необходимого количества секций.
4 сен 15, 19:13    [18110850]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос о нетрадиционном использовании секции From  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21249
Хотя нет, партиционирование не позволит работать с одной секцией...
Ну тогда только MERGE.
4 сен 15, 19:14    [18110854]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить