Запрос в MySQL и выбор из нескольких таблиц

303
21 декабря 2016, 01:50

Есть несколько одинаковых таблиц в базе. Как сделать запрос из всех? Вот запрос на выбор из одной:

mysql_query("select * from `table` where `dt` = '20161201'");
Answer 1

UNION - применяется для объединения результатов двух или более SQL-запросов в единую таблицу, состоящую из схожих строк. Оба запроса должны возвращать одинаковое число столбцов и совместимые типы данных в соответствующих столбцах.

Пример

<запрос1>
UNION [ALL]
<запрос2>
UNION [ALL]
<запрос3>
 .....;

Более подробный пример

SELECT City, Country FROM Customers
WHERE Country='Germany'
UNION ALL
SELECT City, Country FROM Suppliers
WHERE Country='Germany'
ORDER BY City;

Можно писать UNION или UNION ALL.

Разница между операторами UNION и UNION ALL заключается в том, что первый выкидывает из окончательного результата повторяющиеся строки.

Дополнение от @teran из комментария: в отдельный столбец можно выбрать, например, имя таблицы из которой пришли данные. а-ля

...., 'customers' as tbl FROM Customers 

если вдруг необходимо будет знать, откуда реально пришли строки (что будет иметь смысл в только случае UNION ALL)

Answer 2

Создайте надтаблицу с использованием ENGINE=Merge. В крайнем случае объединяющий VIEW. Совсем в крайнем - UNION ALL непосредственно в запросе.

Если будете использовать просто UNION (или его синоним UNION DISTINCT) во VIEW или непосредственном запросе - приготовьтесь к могучему оверхеду на сортировку и удаление дубликатов (ну то есть тормозить будет нещадно).

READ ALSO
Обработка ошибок MySQL в PHP

Обработка ошибок MySQL в PHP

ЗдравствуйтеВ разных частях моего php-скрипта я выполняю запросы к БД MySQL

264
Подсчитать кол-во записей в каждой категории

Подсчитать кол-во записей в каждой категории

ЗдравствуйтеТребуется на сайте произвести подсчет, сколько записей находится в каждой категории, а так же подсчитать общее кол-во всех записей

251
SQL to json converting

SQL to json converting

У меня есть table на котором есть большая информация, мне нужно написать SELECT * FROM table, так чтобы SELECT возвращал меня информацию на JSON формате, например...

312