как написать коррелированный подзапрос в снежинке

Не могли бы вы помочь мне, как написать коррелированный подзапрос в снежинке?

select a
       b,
       (select d.x from d inner join b on d.id=b.id) As x,
       (select d.x from d inner join bon d.id!=b.id) AS Y  
FROM a 
inner join b on a.id=b.id

выберите X из таблицы d на основе условия соединения. выберите другой столбец из той же таблицы на основе другого условия соединения Вышеупомянутый запрос почти мой исходный сценарий. не могли бы вы мне помочь, как написать такой же запрос в снежинке?


person sivaraj    schedule 04.01.2019    source источник
comment
Предоставьте пример набора данных и результат ожидаемого запроса. Но обратите внимание, что в списке SELECT у вас могут быть только подзапросы, каждый из которых возвращает ТОЧНО ОДНУ СТРОКУ. Я предполагаю, что в вашем запросе дело обстоит не так. Вы также можете рассмотреть подзапрос типа SELECT d.x FROM d WHERE d.id=b.id, который может помочь. Но я не понимаю, как это может работать как для =, так и для !=.   -  person Marcin Zukowski    schedule 06.01.2019
comment
хорошо, спасибо @ MarcinZukowski, дай мне попробовать   -  person sivaraj    schedule 07.01.2019


Ответы (1)


Коррелированные подзапросы - это, как правило, плохая идея, поскольку во многих случаях они приводят к одному запросу на строку, который не масштабируется. Если я правильно читаю ваш запрос, вы можете просто дважды присоединиться к d с разными условиями соединения, чтобы получить x и y.

select
    a.*,
    b.*,
    d1.x as x,
    d2.x as y
from
    a
    join
    b on a.id = b.id
    join
    d as d1 on d.id = b.id
    join
    d as d2 on d.id <> b.id
person Claus Herther    schedule 07.01.2019
comment
Это должно быть отмечено как ответ. Годом позже коррелированные подзапросы не поддерживаются в предложениях SELECT - docs.snowflake.com/en/user-guide/ - person Tom; 04.12.2020