Выбрать из всех таблиц - MySQL
У меня есть база данных mySQL под названием listDB
, которая содержит несколько таблиц с именем столбца Product
и т.д. Я хочу SELECT
из всех таблиц, где Product Like% XYZ%, и отображает результат поиска в отдельной таблице.
Я пробовал это:
SELECT * FROM * WHERE Product LIKE %XYZ%
Но он не работает. Каков правильный запрос для этой цели?
Ответы
Ответ 1
Вы получаете все таблицы, содержащие продукт столбца, используя этот статус:
SELECT DISTINCT TABLE_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME IN ('Product')
AND TABLE_SCHEMA='YourDatabase';
Затем вы должны запустить cursor в этих таблицах, чтобы каждый раз выбирать:
Select * from OneTable where product like '%XYZ%'
Результаты должны быть введены в третью таблицу или представление, посмотрите здесь.
Примечание. Это может работать только в том случае, если структура всей таблицы аналогична, иначе вам нужно будет увидеть, какие столбцы объединены для всех этих таблиц и создать таблицу результатов /View, чтобы содержать только эти столбцы.
Ответ 2
Как сказал Сухель Меман в комментариях:
SELECT column1, column2, column3 FROM table 1
UNION
SELECT column1, column2, column3 FROM table 2
...
будет работать.
Но все ваши SELECTS
должны состоять из одинакового количества столбцов. И поскольку вы показываете его в одной результирующей таблице, они должны содержать одну и ту же информацию.
Что вы можете сделать, это JOIN на идентификаторе продукта или что-то в этом роде. Таким образом, вы получите больше столбцов, что больше имеет смысл в большинстве случаев.
Ответ 3
SELECT product FROM Your_table_name WHERE Product LIKE '%XYZ%';
Вышеприведенный оператор покажет результат из одной таблицы. Если вы хотите добавить больше таблиц, просто используйте оператор UNION.
SELECT product FROM Table_name_1
WHERE Product LIKE '%XYZ%'
UNION
SELECT product FROM Table_name_2
WHERE Product LIKE '%XYZ%'
UNION
SELECT product FROM Table_name_3
WHERE Product LIKE '%XYZ%'
... и т.д.
Ответ 4
Вы можете получить все таблицы, в которых есть столбец "Продукт" из information_Schema.columns
SELECT DISTINCT table_name FROM information_schema.columns WHERE column_name ="Product";
Не создавайте процедуру
delimiter //
CREATE PROCEDURE curdemo()
BEGIN
DECLARE a varchar(100);
DECLARE cur1 CURSOR FOR SELECT DISTINCT table_name FROM information_schema.columns WHERE column_name ="Product";
OPEN cur1;
read_loop: LOOP
FETCH cur1 INTO a;
SELECT * FROM a;
END LOOP;
CLOSE cur1;
END;
delimiter ;
call curdemo();
Ответ 5
почему вы просто не сбрасываете базу данных mysql, но с расширением, когда вы запускаете без -single-transaction, вы прерываете соединение с другими клиентами:
mysqldump --host=hostname.de --port=0000 --user=username --password=password --single-transaction --skip-add-locks --skip-lock-tables --default-character-set=utf8 datenbankname > mysqlDBBackup.sql
после этого зачитаем файл и ищем то, что вы хотите.... в Строках.....