Невозможно определить синтаксическую ошибку в моем "с" - PullRequest
0 голосов
/ 02 марта 2019

Это мой первый пост.Пожалуйста, извините за любые типичные ошибки, которые я мог совершить!В приведенном ниже коде я просто пытаюсь вывести два столбца "Invoice_id" и "Category".второй столбец создается с использованием условия case-when.В случае «случай-когда» я использую две таблицы, созданные с помощью оператора «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

Ответы [ 2 ]

0 голосов
/ 03 марта 2019

Это неправильный синтаксис.Сообщение об ошибке вроде как теряется при редактировании:

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

Вам нужен только один WITH в этом запросе.Для «цепочки» операторов используйте следующий синтаксис:

with get_tracks as
    (
    Select 
     .  
     .  
     .  
     .
    ),

 tracks_per_album as
    (
    select ..... 

Обратите внимание на , в конце первой таблицы и не with перед созданием второй таблицы.

0 голосов
/ 02 марта 2019

Вид относится к Могу ли я использовать несколько «с»? , так как ошибка связана с использованием нескольких символов.Извините, не знаю, должен ли это быть комментарий или ответ, но оставляю как ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...