Jak mohu odstranit poddotaz od select?

0

Otázka

Potřebuji pomoc při odstraňování poddotaz z původní SELECT. Je to vůbec možné? Budu potřebovat, aby nakonec přesunout dotazů, jako je tento, aby Denodo/VQL, který neumožňuje poddotazy příkazy SELECT (ale neumožňuje CTE/S a poddotazy v Z/KDE).

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

Nejlepší odpověď

2

Vidím několik možností. Nejvíce přímý překlad se zdá být:

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%'

ale použití RIGHT OUTER JOIN může být neznámé. Přejít na více obeznámeni LEFT OUTER JOIN musíme zvrátit postavení tabulek v dotazu a jak změnit podmínky jsou uvedeny:

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%'

Nechal jsem si přezdívky stejné, takže můžete vidět, jak se pohyboval kolem v dotazu. V obou dotazy m1 je primární tabulky, to je, to je ten, který musí poskytnout data, zatímco m2 je sekundární, nebo "volitelné" stůl - to může nebo nemusí mít údaje, které odpovídá primární.

Osobně dávám přednost připojí přes poddotazy, jak jsem je najít jednodušší to pochopit, ale YMMV.

2021-11-24 02:01:18

V jiných jazycích

Tato stránka je v jiných jazycích

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