Как воссоздать этот подзапрос для представления - PullRequest
0 голосов
/ 05 апреля 2019

MariaDb не поддерживает подзапросы, поэтому я пытаюсь найти лучший способ принять этот запрос и превратить его в представление.Я не уверен на 100%, как это сделать, поскольку знаю, что для этого нужно создать несколько представлений, но я не уверен, как это разбить.

Меня попросили создать представление из этого набора данных, и я смог создать этот запрос с помощью (подзапросов), но теперь мне нужно превратить его в представление, по которому я ударил стену, так какя не знаю, с чего начать при попытке разбить это на удобоваримые части, чтобы создать несколько представлений, чтобы создать главное представление, которым является этот запрос.

SELECT
`TestDelete`.`CustomerInputName` AS `CustomerInputName`,
`TestDelete`.`customerInputCustid` AS `customerInputCustid`,
( CASE WHEN ( `TestDelete`.`YQ` = '2017Q1') and `TestDelete`.`customerInputCustid` in (select `portfolio_review_ACC1_2017Q1_REUP`.`customerInputCustid` from portfolio_review_ACC1_2017Q1_REUP)
THEN `TestDelete`.`Quarter` 
WHEN ( `TestDelete`.`YQ` = '2017Q1' and `TestDelete`.`customerInputCustid` not in (select `portfolio_review_ACC1_2017Q1_REUP`.`customerInputCustid` from portfolio_review_ACC1_2017Q1_REUP)) or 
( `TestDelete`.`YQ` = '2017Q2' and `TestDelete`.`customerInputCustid` not in (select `portfolio_review_ACC1_2017Q1_REUP`.`customerInputCustid` from portfolio_review_ACC1_2017Q1_REUP)) or 
( `TestDelete`.`YQ` = '2017Q3' and `TestDelete`.`customerInputCustid` not in (select `portfolio_review_ACC1_2017Q1_REUP`.`customerInputCustid` from portfolio_review_ACC1_2017Q1_REUP)) or 
( `TestDelete`.`YQ` = '2017Q4' and `TestDelete`.`customerInputCustid` not in (select `portfolio_review_ACC1_2017Q1_REUP`.`customerInputCustid` from portfolio_review_ACC1_2017Q1_REUP)) or 
( `TestDelete`.`YQ` = '2018Q1' and `TestDelete`.`customerInputCustid` not in (select `portfolio_review_ACC1_2017Q1_REUP`.`customerInputCustid` from portfolio_review_ACC1_2017Q1_REUP)) or 
( `TestDelete`.`YQ` = '2018Q2' and `TestDelete`.`customerInputCustid` not in (select `portfolio_review_ACC1_2017Q1_REUP`.`customerInputCustid` from portfolio_review_ACC1_2017Q1_REUP)) or 
( `TestDelete`.`YQ` = '2018Q3' and `TestDelete`.`customerInputCustid` not in (select `portfolio_review_ACC1_2017Q1_REUP`.`customerInputCustid` from portfolio_review_ACC1_2017Q1_REUP)) or 
( `TestDelete`.`YQ` = '2018Q4' and `TestDelete`.`customerInputCustid` not in (select `portfolio_review_ACC1_2017Q1_REUP`.`customerInputCustid` from portfolio_review_ACC1_2017Q1_REUP))
then 'First'
END ) AS `2017Q1`

1 Ответ

0 голосов
/ 10 мая 2019

Похоже, это будет эквивалентно, но быстрее:

`TestDelete`.`YQ` IN ('2017Q2', '2017Q3', ...)
     AND NOT EXISTS(
           SELECT 1 FROM portfolio_review_ACC1_2017Q1_REUP
               WHERE customerInputCustid = TestDelete.customerInputCustid
                   )

Между тем, ваш SELECT, кажется, отсутствует по крайней мере FROM customerInputCustid ??

...