Ako môžem odstrániť poddotaz z select?

0

Otázka

Potrebujem pomoc pri odstraňovaní poddotaz z pôvodnej SELECT. Je to vôbec možné? Ja som to potrebujú, aby nakoniec presunúť otázky, ako sa to Denodo/VQL, ktorý neumožňuje subqueries v VYBERTE závierka (ale umožňuje CTE/S a subqueries 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

Najlepšiu odpoveď

2

Vidím dve možnosti. Najviac priamy preklad sa zdá byť:

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žitie RIGHT OUTER JOIN môžu byť neznáme. Ak chcete prepnúť na známejšie LEFT OUTER JOIN potrebujeme na zadnej pozície v tabuľkách dotaz a zmeniť, ako podmienky sú prezentované:

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

Stále som aliasy rovnaké, takže môžete vidieť, ako sa pohyboval v dotaze. V oboch otázky m1 je primárnej tabuľke, to je, je to ten, ktorý musí poskytnúť údaje, pričom m2 je sekundárne alebo "voliteľné" tabuľka - to môže alebo nemusí mať k dispozícii údaje, ktoré zodpovedá zš.

Osobne som radšej sa pripojí cez subqueries, ako som si ich ľahšie pochopiť, ale YMMV.

2021-11-24 02:01:18

V iných jazykoch

Táto stránka je v iných jazykoch

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