首页 > 解决方案 > SQL:无法使用“with as”来保存选定的结果

问题描述

我有一个内部连接结果,我想使用它来保存它,with as但收到一个错误。我用的是雪花。

我的代码:

with t as (select *
from
(select ID, PRICE from DB.TABLE1 
WHERE PRICE IS NOT NULL and ID = '1111') A
inner join 
(select ID, BID, ACCEPTED from DB.TABLE2
WHERE BID IS NOT NULL and ID = '1111') B
ON A.ID = B.ID);

错误:SQL compilation error: syntax error line 8 at position 25 unexpected ';'.

如果我只运行内部连接

select *
    from
    (select ID, PRICE from DB.TABLE1 
    WHERE PRICE IS NOT NULL and ID = '1111') A
    inner join 
    (select ID, BID, ACCEPTED from DB.TABLE2
    WHERE BID IS NOT NULL and ID = '1111') B
    ON A.ID = B.ID

我得到了这个结果

ID,  PRICE,ID,BIDS,ACCEPTED
1111,180,1111,200,FALSE
1111,180,1111,180,FALSE
1111,180,1111,180,FALSE
1111,180,1111,100,TRUE

知道为什么我收到错误消息吗?

标签: sql

解决方案


WITH是用于引入公用表表达式的语法。这是在单个查询中使用的表达式。它很像FROM子句中的子查询,只是它可以被多次引用。

所以正确的用法是:

with t as (
      select . . .
     )
select count(*)
from t;

换句话说,您需要遵循with使用 CTE 的东西。否则,您希望将结果存储在一个真实的表中——临时的或其他的。


推荐阅读