Presto使用“ with”查询创建表

Moo*_*osa 6 sql presto

通常在Presto中创建一个表(从现有的db表中创建),我这样做:

create table abc as (
select...
)
Run Code Online (Sandbox Code Playgroud)

但是为了简化代码,我细分了以下子查询:

with sub1 as (
select...
),

sub2 as (
select...
),

sub3 as (
select...
)

select
from sub1 join sub2 on ...
          join sub3 on ...
Run Code Online (Sandbox Code Playgroud)

我在哪里将创建表语句放在哪里?实际查询比上述查询更为复杂,因此我试图避免将子查询放入主查询中。

SUK*_*R S 10

如果涉及字符串,则以下工作

WITH sample AS (
    SELECT * FROM (VALUES ('strA', 'strB'), ('strC', 'strD'), ('strE', 'strF')) AS account (name, cat)
)

SELECT name, cat from sample;
Run Code Online (Sandbox Code Playgroud)

如果整数仅涉及值,则以下工作有效:-

WITH  slab (SNo,Amount) AS (VALUES (1,1000),(2,2000),(3,3000),(4,4000),(5,5000),(6,6000),(7,7000),(8,8000),(9,9000),(10,10000),(11, 11000),(12,12000),(13,13000),(14,14000),(15,15000),(16,16000),(17,17000),(18,18000),(19,19000),(20,20000),(21,21000),(22,22000),(23,23000),(24,24000),(25,25000),(26,26000),(27,27000),(28,28000),(29,29000),(30,30000),(31,31000),(32,32000),(33,33000),(34,34000),(35,35000),(36,36000),(37,37000),(38,38000),(39,39000),(40,40000),(41,41000),(42,42000),(43,43000),(44,44000),(45,45000),(46,46000),(47,47000),(48,48000),(49,49000),(50,50000),(51,51000)
) 
SELECT * FROM slab;
Run Code Online (Sandbox Code Playgroud)


小智 5

INSERT INTO不确定CREATE TABLE可以实现:

INSERT INTO s1 WITH q1 AS (...) SELECT * FROM q1

也许您可以试一下:

CREATE TABLE s1 as WITH q1 AS (...) SELECT * FROM q1

  • @Moosa - 介意说明这里实际工作的内容吗?提供的 CREATE TABLE ... 语法是否有效,或者您是否必须单独使用 INSERT INTO?谢谢! (2认同)