22

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

我试过这个:

SELECT * FROM * WHERE Product LIKE %XYZ%

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

4

6 回答 6

12

您可以使用以下语句获取包含列产品的所有表:

SELECT DISTINCT TABLE_NAME 
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE COLUMN_NAME IN ('Product')
        AND TABLE_SCHEMA='YourDatabase';

然后您必须在这些表上运行光标,以便每次选择:

Select * from OneTable where product like '%XYZ%'

结果应该输入到第三个表或视图中,看看这里

注意:这只有在所有表的结构相似的情况下才有效,否则 aou 将必须查看所有这些表的哪些列是联合的,并创建您的结果表/视图以仅包含这些列。

于 2013-02-18T07:07:59.590 回答
6
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%' 

... 等等

于 2013-09-25T17:16:55.830 回答
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 

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

于 2013-03-20T19:09:06.980 回答
3

正如 Suhel Meman 在评论中所说:

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

会工作。

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

您可能想要做的是在产品 ID 上加入 JOIN 或类似的东西。这样你会得到更多的列,这在大多数情况下更有意义。

于 2013-02-18T07:07:55.403 回答
3

改进为@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();
于 2020-10-20T16:26:41.653 回答
2

您可以从 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();
于 2013-02-18T07:14:05.130 回答