Cum pot elimina subinterogare de la select?

0

Problema

Am nevoie de ajutor în eliminarea subinterogare din original SELECT. Acest lucru este posibil. Am nevoie de asta pentru a muta în cele din urmă, cum ar fi interogări asta Denodo/VQL, care nu permite subinterogări în declarațiile SELECT (dar nu permite CTE/CU și subinterogări în LA/de UNDE).

select case when material in (
    select material
    from schema.material_table
    where old_material like '%55AD%'
  ) then 'Found'
  else 'Not Found'
end
from schema.material_table;
1

Cel mai bun răspuns

2

Eu pot vedea o serie de opțiuni. Cel mai direct traducere pare a fi:

SELECT CASE
         WHEN m2.MATERIAL IS NOT NULL THEN 'Found'
         ELSE 'Not Found'
       END AS IZZIT_THERE
  FROM SCHEMA.MATERIAL_TABLE m2
  RIGHT OUTER JOIN SCHEMA.MATERIAL_TABLE m1
    ON m1.MATERIAL = m2.MATERIAL
  WHERE m1.OLD_MATERIAL LIKE '%55AD%'

dar utilizarea unui RIGHT OUTER JOIN poate fi necunoscut. Pentru a comuta la mai familiar LEFT OUTER JOIN trebuie să inversăm poziția de tabele în interogare și modifica modul în care sunt prezentate condițiile:

SELECT CASE
         WHEN m1.MATERIAL IS NOT NULL THEN 'Found'
         ELSE 'Not Found'
       END AS IZZIT_THERE
  FROM SCHEMA.MATERIAL_TABLE m1
  LEFT OUTER JOIN SCHEMA.MATERIAL_TABLE m2
    ON m2.MATERIAL = m1.MATERIAL
  WHERE m1.OLD_MATERIAL LIKE '%55AD%'

Am păstrat pseudonime aceeași astfel încât să puteți vedea cum s-au mutat în jurul valorii de în interogare. În ambele interogări m1 este primar de masă, care este, acesta este cel care trebuie să furnizeze date, în timp ce m2 este secundară sau "optional" masa - acesta poate sau nu poate avea date care se potrivește primar.

Personal, prefer reunește peste subinterogari cum le-am găsit mai ușor de înțeles, dar YMMV.

2021-11-24 02:01:18

În alte limbi

Această pagină este în alte limbi

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................