У меня есть продукты в 3 (идентично структурированных) таблицах с 3 столбцами столбцов: идентификатор, дата, запросы.
При поиске определенного идентификатора продукта я хотел бы искать во всех таблицах (заранее не знаю, в какой таблице можно найти идентификатор продукта)
Таблица1 очень большая (более 100 миллионов строк), и в настоящее время я использую этот запрос для создания временной таблицы, которую я использую для выполнения других запросов.
CREATE TEMPORARY TABLE temp ENGINE=MEMORY
as (select DISTINCT id, date, requests from table1 WHERE id='$id');
SELECT ... FROM temp
Объединение трех таблиц с использованием UNION и последующий поиск идентификатора занимает вечность из-за размера таблицы 1 (более 100 миллионов строк), так что это неправильный подход.
Самый быстрый способ, которым я придумал (я бы сделал это с помощью PHP):
search table1, if id found create temporary table,
if id not found in table 1 then
search table2, if id found create temporary table,
if id not found in table 2 then
search table3, if id found create temporary table,
if id not found in table3 then return id not found.
Однако, таким образом, я выполняю несколько запросов (если id находится в таблице 3, то будет выполнено 4 запроса).
Есть ли лучший способ сделать это с MySQL?
ДОБАВЛЕНО:
Будет ли что-то вроде этой работы (какой правильный синтаксис для этого, что у меня ниже, выдает ошибку)
CREATE TEMPORARY TABLE temp ENGINE=MEMORY
as (
(select DISTINCT id, date, requests from table1 WHERE id='$id')
UNION
(select DISTINCT id, date, requests from table2 WHERE id='$id')
UNION
(select DISTINCT id, date, requests from table3 WHERE id='$id')
)
попробуй это
SELECT * FROM information_schema.columns WHERE column_name = 'column_name';
или же
SELECT table_name, column_name FROM information_schema.columns WHERE column_name = 'column_name';
Других решений пока нет …