我有一个mySQL数据库listDB,它包含几个带有列名Product等的表.我想SELECT从所有表中Product Like%XYZ%,并在单独的表中显示搜索结果.
我试过这个:
SELECT * FROM * WHERE Product LIKE %XYZ%
Run Code Online (Sandbox Code Playgroud)
但它没有用.为此目的的正确查询是什么?
您可以使用此参数获取包含列产品的所有表:
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)
... 等等
正如苏赫尔·梅曼在评论中所说:
SELECT column1, column2, column3 FROM table 1
UNION
SELECT column1, column2, column3 FROM table 2
...
Run Code Online (Sandbox Code Playgroud)
会工作。
但所有的列都SELECTS必须包含相同数量的列。因为您将其显示在一个结果表中,所以它们应该包含相同的信息。
您可能想要做的是 JOIN 产品 ID 或类似的操作。这样您将获得更多列,这在大多数情况下更有意义。