从所有表中选择 - MySQL

Far*_*man 18 mysql sql

我有一个mySQL数据库listDB,它包含几个带有列名Product等的表.我想SELECT从所有表中Product Like%XYZ%,并在单独的表中显示搜索结果.

我试过这个:

SELECT * FROM * WHERE Product LIKE %XYZ%
Run Code Online (Sandbox Code Playgroud)

但它没有用.为此目的的正确查询是什么?

Clo*_*ble 9

您可以使用此参数获取包含列产品的所有表:

SELECT DISTINCT TABLE_NAME 
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE COLUMN_NAME IN ('Product')
        AND TABLE_SCHEMA='YourDatabase';
Run Code Online (Sandbox Code Playgroud)

然后你必须在这些表上运行一个游标,所以你每次都选择:

Select * from OneTable where product like '%XYZ%'
Run Code Online (Sandbox Code Playgroud)

结果应该输入第3个表或视图,看看这里.

注意:这仅在所有表的结构相似时才有效,否则您将必须查看所有这些表的哪些列已合并,并创建结果表/ View以仅包含这些列.


小智 6

SELECT product FROM Your_table_name WHERE Product LIKE '%XYZ%';
Run Code Online (Sandbox Code Playgroud)

上面的语句将显示来自单个表的结果。如果要添加更多表,只需使用 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%' 
Run Code Online (Sandbox Code Playgroud)

... 等等


Jen*_*ens 2

正如苏赫尔·梅曼在评论中所说:

SELECT column1, column2, column3 FROM table 1
UNION
SELECT column1, column2, column3 FROM table 2
...
Run Code Online (Sandbox Code Playgroud)

会工作。

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

您可能想要做的是 JOIN 产品 ID 或类似的操作。这样您将获得更多列,这在大多数情况下更有意义。