从所有表中选择 - MySQL

时间:2013-02-18 06:58:11

标签: mysql sql

我有一个名为listDB的mySQL数据库,其中包含多个列名为Product的表等。我想从所有表格中找到SELECT,其中Product Like%XYZ%,并显示搜索结果结果是一个单独的表。

我试过了:

SELECT * FROM * WHERE Product LIKE %XYZ%

但它不起作用。为此目的的正确查询是什么?

6 个答案:

答案 0 :(得分:9)

使用此语句获取包含列产品的所有表:

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%'

应将结果输入第3个表格或视图,看看here

注意:这只有在所有表的结构相似时才有效,否则你必须看到哪些列对所有这些表都是统一的,并创建结果表/ View以仅包含这些列。

答案 1 :(得分:4)

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%' 

......等等

答案 2 :(得分:3)

正如Suhel Meman在评论中所说:

SELECT column1, column2, column3 FROM table 1
UNION
SELECT column1, column2, column3 FROM table 2
...

会起作用。

但是您的所有SELECTS都必须包含相同数量的列。而且因为您在一个结果表中显示它们,它们应该包含相同的信息。

您可能想要做什么,是产品ID上的JOIN或类似的东西。通过这种方式,您可以获得更多列,这在大多数情况下更有意义。

答案 3 :(得分:3)

为什么你不只是转储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 

之后读出文件并在Strings中搜索你想要的......

答案 4 :(得分:2)

您可以从information_Schema.columns

获取所有包含“Product”列的表
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 :(得分:1)

改善@inno答案

delimiter //

DROP PROCEDURE IF EXISTS get_product;  
CREATE PROCEDURE get_product()
BEGIN
   DECLARE i VARCHAR(100); 
   DECLARE cur1 CURSOR FOR SELECT DISTINCT table_name FROM information_schema.columns WHERE COLUMN_NAME IN ('Product');
   OPEN cur1;

   read_loop: LOOP
       FETCH cur1 INTO i;
    
       SELECT i; -- printing table name
    
       SET @s = CONCAT('select * from ', i, ' where Product like %XYZ%'); 
       PREPARE stmt1 FROM @s;
       EXECUTE stmt1;
       DEALLOCATE PREPARE stmt1;

   END LOOP read_loop;

   CLOSE cur1;
END//

delimiter ;

call get_product();