Почему JOIN LATERAL не отключает несколько полей

#sql #postgresql #unpivot

#sql #postgresql #отключите

Вопрос:

Я очень новичок в postgresql и был бы очень признателен за любую помощь. В настоящее время я использую этот скрипт (он работает нормально):

  FROM dataset as d
    
    LEFT JOIN metric m on d.datasetid=m.datasetid
    LEFT JOIN value v on m.metricid=v.metricid
    LEFT JOIN submetric_1 s1 ON v.submetric_1id=s1.submetric_1id
    LEFT JOIN submetric_2 s2 ON v.submetric_2id=s2.submetric_2id
    LEFT JOIN year y on v.valueid=y.valueid
    LEFT JOIN quarter q on v.valueid=q.valueid
    LEFT JOIN country c on v.valueid=c.valueid
    LEFT JOIN region r on v.valueid=r.valueid
    LEFT JOIN county co on v.valueid=co.valueid
    LEFT JOIN ladistrict l on v.valueid=l.valueid
  

Этот скрипт возвращает столбцы из предложения SELECT следующим образом:

значение показателя […] страна регион округ округ

Мне нужно отключить четыре последних географических столбца «страна», «регион», «округ» и «округ», чтобы получить возврат следующим образом:

значение показателя […] География Название географии

                    Country    Country name  
                   Region     Region name   
                   County     County name   
                   Ladistrict Ladistrict name
  

Я пытаюсь использовать предложение LATERAL следующим образом:

 FROM dataset as d

LEFT JOIN metric m on d.datasetid=m.datasetid
LEFT JOIN value v on m.metricid=v.metricid
LEFT JOIN submetric_1 s1 ON v.submetric_1id=s1.submetric_1id
LEFT JOIN submetric_2 s2 ON v.submetric_2id=s2.submetric_2id
LEFT JOIN year y on v.valueid=y.valueid
LEFT JOIN quarter q on v.valueid=q.valueid

LEFT JOIN LATERAL (VALUES
      ('Country',c.country)
      ,('Ladistrict', l.ladistrict)
      ,('Region', r.region)
      , ('County',co.county))
      s (Geography, geo_name)
      
  

И это возвращает ошибку. Пожалуйста, есть идеи, как заставить это работать и отключить эти поля? Спасибо

Комментарии:

1. Пожалуйста, добавьте пример вывода первого запроса и желаемый результат

Ответ №1:

Для левого соединения требуется условие соединения. Это может быть так просто, как ON TRUE . Однако проще просто изменить это левое боковое соединение на поперечное боковое соединение.