Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выборка из нескольких таблиц с одинаковой структурой / 14 сообщений из 14, страница 1 из 1
06.11.2015, 11:55:40
    #39096369
uttka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из нескольких таблиц с одинаковой структурой
Добрый день.
Имеется одна бд с шестью таблицами. Структура одинакова.
Запрос к каждой таблице примерно такой:
Код: plsql
1.
2.
3.
4.
(select id, name from table1 where id="2")
UNION
(select id, name from table2 where id="2")
....;


Но шесть раз выполнять селект не совсем логично, как мне кажется, кроме того, данный запрос будет выполняться (наверное) руками через heidiSQL, а не скриптом, и одинаковое условие так придется писать шесть раз.
Как реализовать грамотно?
Благодарю.
...
Рейтинг: 0 / 0
06.11.2015, 11:57:22
    #39096374
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из нескольких таблиц с одинаковой структурой
Создать надтаблицу (MERGE Engine)?
...
Рейтинг: 0 / 0
06.11.2015, 12:10:58
    #39096399
uttka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из нескольких таблиц с одинаковой структурой
Akina,
Не совсем понимаю как это работает.
Можете пример для моего случая написать?
...
Рейтинг: 0 / 0
06.11.2015, 12:15:58
    #39096410
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из нескольких таблиц с одинаковой структурой
...
Рейтинг: 0 / 0
06.11.2015, 12:37:26
    #39096449
Lumix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из нескольких таблиц с одинаковой структурой
uttkaКак реализовать грамотно?
Благодарю.
Для таких случаев были придуманы вьюхи.

Код: sql
1.
2.
3.
4.
5.
create view v as 
select id, name from table1
     UNION select id, name from table2
     UNION select id, name from table3
     ....;


И дальше обращайтесь с вьюхой v как с обычной таблицей.

Код: sql
1.
select * from v where id = 2;
...
Рейтинг: 0 / 0
06.11.2015, 13:12:32
    #39096525
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из нескольких таблиц с одинаковой структурой
LumixuttkaКак реализовать грамотно?
Благодарю.
Для таких случаев были придуманы вьюхи.

Код: sql
1.
2.
3.
4.
5.
create view v as 
select id, name from table1
     UNION select id, name from table2
     UNION select id, name from table3
     ....;



И дальше обращайтесь с вьюхой v как с обычной таблицей.

Код: sql
1.
select * from v where id = 2;

Только не забудьте убедиться, что MySQL проталкивает условие отбора внутрь view. Иначе индексы не сработают.

И, скорее всего, тут нужны UNION ALL, а не UNION.
...
Рейтинг: 0 / 0
06.11.2015, 13:19:06
    #39096541
Lumix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из нескольких таблиц с одинаковой структурой
miksoftТолько не забудьте убедиться, что MySQL проталкивает условие отбора внутрь view.

Думается мне, что без конкретных инструкций с вашей стороны, самостоятельно он не сможет убедиться проталкивает или не проталкивает. Квалификация у него не самая высокая, если он задает подобные вопросы... хотя я могу и ошибаться...
...
Рейтинг: 0 / 0
06.11.2015, 13:29:46
    #39096563
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из нескольких таблиц с одинаковой структурой
LumixmiksoftТолько не забудьте убедиться, что MySQL проталкивает условие отбора внутрь view. Думается мне, что без конкретных инструкций с вашей стороны, самостоятельно он не сможет убедиться проталкивает или не проталкивает.Это не самое плохое, есть еще хуже:
http://dev.mysql.com/doc/refman/5.5/en/view-algorithms.html If the MERGE algorithm cannot be used, a temporary table must be used instead. MERGE cannot be used if the view contains any of the following constructs:
...
UNION or UNION ALL
...

В итоге, имхо, либо MERGE Engine, либо исходный запрос топикстартера.
...
Рейтинг: 0 / 0
06.11.2015, 14:54:15
    #39096685
Lumix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из нескольких таблиц с одинаковой структурой
miksoftВ итоге, имхо, либо MERGE Engine, либо исходный запрос топикстартера.

Мой опыт подсказывает мне, что решение на вьюхе ему подойдет больше, потому что вопрос эффективности тут не стоит... ведь он сказал, что будет вручную делать запросы через heidiSQL. Поэтому даже если запрос будет выполняться 10 сек, то невелика беда - подождет! Удобство не вбивать условия каждый 6 раз В ДАННОМ КОНКРЕТНОМ случае - это важнее.
...
Рейтинг: 0 / 0
06.11.2015, 15:04:04
    #39096699
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из нескольких таблиц с одинаковой структурой
LumixМой опыт подсказывает мне, что решение на вьюхе ему подойдет больше, потому что вопрос эффективности тут не стоит... ведь он сказал, что будет вручную делать запросы через heidiSQL. Поэтому даже если запрос будет выполняться 10 сек, то невелика беда - подождет! Удобство не вбивать условия каждый 6 раз В ДАННОМ КОНКРЕТНОМ случае - это важнее.Иными словами "я ни хрена не понял, что они тут сказали, но советую делать так, как я говорю".
...
Рейтинг: 0 / 0
06.11.2015, 19:12:39
    #39096941
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из нескольких таблиц с одинаковой структурой
LumixМой опыт подсказывает мне, что решение на вьюхе ему подойдет больше, потому что вопрос эффективности тут не стоит... ведь он сказал, что будет вручную делать запросы через heidiSQL.Если запросы он будет делать вручную, то ему нахрен не нужна вьюха, достаточно нажать Ctrl-H и заменить "2" на нужное значение. Такая замена займёт практически столько же времени, что и замена значения, передаваемого в отбор по вью, зато сам запрос будет работать быстрее.
...
Рейтинг: 0 / 0
06.11.2015, 19:20:16
    #39096948
Lumix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из нескольких таблиц с одинаковой структурой
tanglirи заменить "2" на нужное значение

и заменить 2 на нужное значение 6 РАЗ, а мой многолетний опыт подсказывает, что примерно в 25% случаев он будет в одном месте забывать заменить номер 4496 на 4483, особенно поздно вечером, потому что эти цифры сливаются, а результат такого запроса будет ошибочным, но он не сможет этого увидеть.

единственный способ верно производить подобную замену - копировать запрос в блокнот, там заменять через Ctrl + F и вставлять обратно, но это СЛОЖНЕЕ, чем сделать вьюху.
...
Рейтинг: 0 / 0
06.11.2015, 19:39:52
    #39096965
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из нескольких таблиц с одинаковой структурой
Lumixи заменить 2 на нужное значение 6 РАЗ, а мой многолетний опыт подсказывает, что примерно в 25% случаев он будет в одном месте забывать заменить номер 4496 на 4483,а мой "многолетний опыт"(r)(c)(tm) подсказывает, что текстовому редактору <совсем все равно>, сколько раз значение встречается в обрабатываемом тексте
Lumixединственный способ верно производить подобную замену - копировать запрос в блокнот, там заменять через Ctrl + F и вставлять обратно, но это СЛОЖНЕЕ, чем сделать вьюхуЯ, наверное, ОЧЕНЬ сильно вас удивлю, но в нормальных дб-гуях, к коим можно отнести и heidisql, давно уже имеются (встроенные) редакторы запросов с поддержкой поиска/замены текста.
...
Рейтинг: 0 / 0
06.11.2015, 20:58:09
    #39097024
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из нескольких таблиц с одинаковой структурой
Модератор: Меряние длиной опытом вырезал. Прошу впредь воздерживаться. А то выглядит как будто всего 15 лет, не 15 лет опыта.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выборка из нескольких таблиц с одинаковой структурой / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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