我有一个名为 listDB
的MySQL数据库,其中包含几个带有列名称 Product
等的表。我想从所有表中选择 Product Like %XYZ% 并在单独的表格中显示搜索结果。
我尝试了以下方法:
SELECT * FROM * WHERE Product LIKE %XYZ%
但是它没有起作用。这个目的的正确查询是什么?
使用此语句,您可以获取包含产品列的所有表格:
```sql SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME = 'product'; ```SELECT DISTINCT TABLE_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME IN ('Product')
AND TABLE_SCHEMA='YourDatabase';
然后你需要在这些表上运行一个游标,以便每次选择:
Select * from OneTable where product like '%XYZ%'
结果应该被输入到第三个表或视图中,请查看此处。
注意:这仅适用于所有表的结构类似的情况,否则您将不得不查看哪些列对于所有这些表是相同的,并创建您的结果表/视图只包含这些列。
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%'
... and so on
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
之后读取文件并在字符串中搜索所需内容...
对@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();
SELECT column1, column2, column3 FROM table 1
UNION
SELECT column1, column2, column3 FROM table 2
...
会起作用。
但是你的所有 SELECTS
必须由相同数量的列组成。因为你将其显示在一个结果表中,它们应该包含相同的信息。
你可能想要做的是,根据产品 ID 或类似方式进行连接。这样,你会得到更多的列,大多数情况下更有意义。
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();
SELECT * FROM a
将尝试从一个名为 a
的表中进行选择,而不会将其视为变量。 - Barmar
union
..UNION 用于将多个 SELECT 语句的结果合并为一个结果集。
- Suhel Meman