【发布时间】:2020-06-04 23:44:00
【问题描述】:
我想根据从 SELECT 查询中获得的多个表名创建一个表/视图。
可以从多个已知表中创建一个表,如下所示:
CREATE TABLE new_table AS
SELECT column_1, column_2
FROM clients_1, clients_2, ... clients_n;
要获取表格列表,我可以使用以下内容:
SELECT DISTINCT table_name FROM information_schema.columns WHERE table_name like '%clients_%';
返回:
table_name
1 clients_1
2 clients_2
如何在 CREATE TABLE FROM 子句中使用表名结果作为列表?
我用 WITH: 尝试过这样的事情:
WITH mytable AS
(SELECT DISTINCT table_name FROM information_schema.columns WHERE table_name like '%clients_%')
CREATE TABLE new_table AS
SELECT column_1, column_2
FROM mytable;
但它大多不起作用。
即使是这样,例如不使用 WITH 并选择 * 列 -
CREATE TABLE new_table AS
SELECT *
FROM (SELECT DISTINCT table_name FROM information_schema.columns WHERE
table_name like '%clients_%');
new_table 只是 mytable/nested 查询的副本。
想法?
谢谢!
【问题讨论】:
-
你说“它几乎不起作用”。什么正在工作,什么没有工作?通常在 SQL 系统中,DDL 命令(如
CREATE TABLE)不允许在 DDL 命令中包含SELECT命令,所以如果你有任何 工作,我会感到惊讶。最坏的情况是,您需要查询表名,然后以编程方式将它们组合成单独发送的CREATE VIEW命令。 -
@JohnRotenstein 我给出的最后一个例子有效,SELECT * 在 FROM (SELECT) 的结果上。但是生成的表只是 FROM 部分中嵌套选择的输出(表名的表,而不是每个发现的表中的实际列)。我认为您是对的,将其拆分为两个查询/命令会简单得多。
-
是的,我可以看到最后一个示例将从嵌套查询的 输出 中进行选择,而不是使用嵌套查询中的表的“名称”。这种类型的东西可以在 Amazon Redshift 中作为“构建” Select 语句的存储过程工作,但在 Athena 中就不会那么简单了。
标签: mysql sql parquet amazon-athena