Размещено: 2024-02-04 15:18:32
Теги: mysql
ГОРИЗОНТАЛЬНОЕ ОБЪЕДИНЕНИЕ. ТАБЛИЦА ИЗ ПОЛУЧЕННЫХ ДАННЫХ
Если требуется получить какие-то данные из разных таблиц базы данных и скомпоновать это все в итоговую таблицу то можно написать более простой запрос и без LEFT JOIN.
Но проблема возникает, если вдруг данные в одной из таблиц отсутствуют. Тогда весь запрос выведет false.
Если одна из таблиц может отсутствовать, то нужно использовать оператор LEFT JOIN.
SELECT * FROM (SELECT UNIX_TIMESTAMP(`dt`) AS `dt_orders_1` FROM `orders_1` ORDER BY `dt` DESC LIMIT 1) AS `t1` LEFT JOIN (SELECT UNIX_TIMESTAMP(`dt`) AS `dt_orders_2` FROM `orders_2` ORDER BY `dt` DESC LIMIT 1) AS `t2` ON 1=1 LEFT JOIN (SELECT UNIX_TIMESTAMP(`dt`) AS `dt_orders_3` FROM `orders_3` ORDER BY `dt` DESC LIMIT 1) AS `t3` ON 1=1 LEFT JOIN (SELECT UNIX_TIMESTAMP(`dt`) AS `dt_orders_4` FROM `orders_4` ORDER BY `dt` DESC LIMIT 1) AS `t4` ON 1=1 LEFT JOIN (SELECT UNIX_TIMESTAMP(`dt`) AS `dt_orders_5` FROM `orders_5` ORDER BY `dt` ASC LIMIT 1) AS `t5` ON 1=1 LEFT JOIN (SELECT UNIX_TIMESTAMP(`dt`) AS `dt_orders_6` FROM `orders_6` ORDER BY `dt` ASC LIMIT 1) AS `t6` ON 1=1
В данном запросе используется конструкция ON 1=1, чтобы выполнить операцию объединения таблиц. В данном случае это необходимо, поскольку LEFT JOIN требует указания условия соединения таблиц, даже если оно фактически не имеет значения.
ON 1=1 означает, что каждая строка из первой таблицы (t1) будет объединена со всеми строками из второй таблицы (t2), независимо от значений полей. По сути, это условие всегда истинно, поэтому LEFT JOIN просто объединит строки из обеих таблиц без каких-либо дополнительных условий.
В итоге получим таблицу со столбцами dt_orders_1, dt_orders_2, ..., dt_orders_6 и одной строкой.
Если данные в одной из таблиц отсутствуют, то там будет значение NULL.
После этого данные легко вывести в виде ассоциативного массива.
На эту страницу чаще всего попадают по запросам: объединение таблиц, горизонтальное объединение ячеек из разных таблиц, данные из разных таблиц в одну