Как правильно соединить при выдаче 2-3+ разных таблиц с одинаковой структурой в единую выборку?
В MYSQL есть 2-3 (и более) разных таблиц с одинаковой структурой (и с полем type, которое у всех разное).
table1 = id, type1, одинаковый набор полей
table2 = id, type2, одинаковый набор полей
...
table5 = id, type5, одинаковый набор полей
при выдаче нужно как-то получить единую table, из всех 5 таблиц.
+можно считать, что id во всех разных таблицах не пересекаются.
пробовал через VIEW = SELECT UNION, то выборка получается очень тормознутая.
Если с первого раза не дошло - это единственный правильный ответ.
Сначала сделать одну таблицу, а потом надавать железной линейкой по рукам тому гению, который наплодил этот зоопарк.
Обычно UNION автоматически делает distinct для всех таблиц-участников процесса union.
Почему "обычно"? он это делает всегда. UNION - это на самом деле короткая версия UNION DISTINCT.
Ещё хуже ситуация, когда используется UNION DISTINCT в CTE - тогда сортировка и отсеивание дубликатов выполняются после каждой итерации по каждому рекурсивному подзапросу.
Akina, согласен. У мне после Spark/Hive диалектов SQL - небольшой шум в голове и я точно не помню какой дефолтный суффикс идет после union. И вроде-бы ALL идет не всегда. Поэтому я пишу обычно.
Стандарт определяет два варианта объединения:
UNION
UNION ALL
Соответственно простой UNION есть UNION DISTINCT. Стандарт, правда, такой конструкции не определяет вообще, но практически все диалекты вводят этот вариант как расширение языка, и пишут так: