【问题标题】:Unable to figure out syntax error in my "with"无法找出我的“with”中的语法错误
【发布时间】:2019-03-02 19:50:47
【问题描述】:

这是我的第一篇文章。请原谅我可能犯的任何典型的菜鸟错误! 在下面的代码中,我只是想输出两列“Invoice_id”和“Category”。 第二列是使用 case-when 条件创建的。 在 case-when 条件下,我使用了两个使用“with”语句创建的表。 我只是无法用我的“with”找出语法错误。 任何帮助是极大的赞赏! (我没有遵守标准的SQL小写/大写格式,请忽略)

with get_tracks as
    (
    Select 
        i.invoice_id,
        i.customer_id,
        t.track_id as track_id,
        a.album_id as album_id
    from invoice i
    inner join invoice_line il on i.invoice_id=il.invoice_id
    inner join track t on il.track_id=t.track_id
    inner join album a on a.album_id=t.album_id
    )
with tracks_per_album as
    (
    select 
        count(distinct t.track_id) as num_of_tracks,
        a.album_id as album_id
    from album a 
    inner join track t on a.album_id=t.album_id
    group by 2
    )

select 
    invoice_id,
    case
        when ((select count(distinct track_id) 
        from get_tracks 
        group by album_id
        except
        select num_of_tracks from tracks_per_album
        group by album_id)

        AND

        (select num_of_tracks from tracks_per_album
         group by album_id
         except
         select count(distinct track_id) from get_tracks 
         group by album_id
          ) is Null) then "Album"

          else "Individual"
    end as category
from get_tracks group by 1

错误信息:

DatabaseError: Execution failed on sql '
with get_tracks as
    (
    Select 
        i.invoice_id,
        i.customer_id,
        t.track_id as track_id,
        a.album_id as album_id
    from invoice i
    inner join invoice_line il on i.invoice_id=il.invoice_id
    inner join track t on il.track_id=t.track_id
    inner join album a on a.album_id=t.album_id
    )

with tracks_per_album as
    (
    select 
        count(distinct t.track_id) as num_of_tracks,
        a.album_id as album_id
    from album a 
    inner join track t on a.album_id=t.album_id
    group by 2
    )

select 
    invoice_id,
    case
        when ((select count(distinct track_id) 
        from get_tracks 
        group by album_id
        except
        select num_of_tracks from tracks_per_album
        group by album_id)

        AND

        (select num_of_tracks from tracks_per_album
         group by album_id
         except
         select count(distinct track_id) from get_tracks 
         group by album_id
          ) is Null) then "Album"

          else "Individual"
    end as category
from get_tracks group by 1
': near "with": syntax error

【问题讨论】:

    标签: sqlite case


    【解决方案1】:

    有点与Can I use multiple "with"? 相关,因为错误是在处理使用Multiple withs。抱歉,不知道这应该是评论还是答案,但作为答案留下。

    【讨论】:

      【解决方案2】:

      这是不正确的语法。错误消息在编辑中有点丢失:

      from get_tracks group by 1 ': near "with": syntax error

      在此查询中您只需要一个WITH。要使用语句“链接”,请使用以下语法:

      with get_tracks as
          (
          Select 
           .  
           .  
           .  
           .
          ),
      
       tracks_per_album as
          (
          select ..... 
      

      注意第一个表末尾的,,在创建第二个表之前没有with

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-02-23
        • 1970-01-01
        • 1970-01-01
        • 2021-08-06
        • 2018-08-21
        • 2022-12-24
        • 2021-03-18
        • 2021-08-27
        相关资源
        最近更新 更多