Подтвердить что ты не робот

Выбрать из всех таблиц - MySQL

У меня есть база данных mySQL под названием listDB, которая содержит несколько таблиц с именем столбца Product и т.д. Я хочу SELECT из всех таблиц, где Product Like% XYZ%, и отображает результат поиска в отдельной таблице.

Я пробовал это:

SELECT * FROM * WHERE Product LIKE %XYZ%

Но он не работает. Каков правильный запрос для этой цели?

4b9b3361

Ответ 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 

после этого зачитаем файл и ищем то, что вы хотите.... в Строках.....