我有一个名为listDB
的mySQL数据库,其中包含多个列名为Product
的表等。我想从所有表格中找到SELECT
,其中Product Like%XYZ%,并显示搜索结果结果是一个单独的表。
我试过了:
SELECT * FROM * WHERE Product LIKE %XYZ%
但它不起作用。为此目的的正确查询是什么?
答案 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();