从所有表中选择-MySQL
我有一个名为从所有表中选择-MySQL,mysql,sql,Mysql,Sql,我有一个名为listDB的mySQL数据库,其中包含多个列名称为Product等的表。我想从所有包含Product(如%XYZ%)的表中选择,并在单独的表中显示搜索结果 我试过这个: SELECT * FROM * WHERE Product LIKE %XYZ% 但它不起作用。对此,什么是正确的查询?正如Suhel Meman在评论中所说: SELECT column1, column2, column3 FROM table 1 UNION SELECT column1, column2,
listDB
的mySQL数据库,其中包含多个列名称为Product
等的表。我想从所有包含Product(如%XYZ%)的表中选择
,并在单独的表中显示搜索结果
我试过这个:
SELECT * FROM * WHERE Product LIKE %XYZ%
但它不起作用。对此,什么是正确的查询?正如Suhel Meman在评论中所说:
SELECT column1, column2, column3 FROM table 1
UNION
SELECT column1, column2, column3 FROM table 2
...
会有用的
但是所有的选择都必须包含相同数量的列。由于您在一个结果表中显示它,所以它们应该包含相同的信息
您可能想做的是在产品ID上进行连接或类似的操作。通过这种方式,您将获得更多的列,这在大多数情况下更有意义。您可以使用以下语句获得包含列产品的所有表:
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将必须查看所有这些表的哪些列是统一的,并创建结果表/视图以仅包含这些列。您可以从信息\u 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();
为什么您不只是转储mysql数据库,而是在运行时使用扩展--单个事务将中断与其他客户端的连接:
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
在那之后,读出文件并搜索你想要的。。。。串串
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%'
。。。等等改进@inno-answer
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语句的结果合并到单个结果集中代码>尝试从listDB.*中选择*,其中的产品类似于“%XYZ%”@Parvathy-此查询不起作用。。语法错误发生如果必须这样做,你应该重新考虑你的数据库模式。这是行不通的SELECT*FROM a
将尝试从字面上命名为a
的表中进行选择,它不会将其视为变量。@barmar在sqlplus中工作了将近8年:从列名称所在的所有列中选择不同的表名('Product')