【发布时间】:2018-09-30 01:48:31
【问题描述】:
数据库是mysql/mariaDB。
我的数据库旨在存储有关某事的月度报告。他们的名字是(例子):table1, table2, table3...
我想创建将创建/重新创建包含所有表联合(联合所有)的视图的函数/过程。
类似:
1.首先从信息模式中选择所有表名。
SELECT TABLE_NAME from information_schema.`TABLES` where TABLE_NAME like 'table%'
- 然后我会尝试在某个循环中设置它以使用来自第一个查询的结果集。
但我的第一步有问题,我尝试只合并一个固定表 + 一个来自第一个查询的固定表,它返回错误给我。
我试试:
select * from `table4`
UNION
SELECT * from (SELECT TABLE_NAME from information_schema.`TABLES`
where TABLE_NAME like 'table%' limit 1) as dd
返回错误:使用的 SELECT 语句有不同的列数, 但是当我执行子查询时,我得到 1 个具有正确表名的结果,并且当我在没有子查询的 from 子句中设置该名称时,它可以工作。
知道为什么会发生这种情况,也许还有一些建议如何实现这种动态联合。
【问题讨论】:
-
我不知道该怎么做,但你需要在这里使用动态 SQL。目前,您正在尝试选择
FROM一个字符串,not 一个表,所以它当然失败了。 -
我知道这些不是动态 sql,但我尝试从结果集中传递一条记录。作为 from 子句的表名。就像在 php 示例中一样,循环遍历某个数组或结果集并将每个数组或结果集传递给某个函数。但现在看起来我错过了一切,因为 sql 中的动态完全以另一种方式工作。