Come posso rimuovere la subquery dall'istruzione select?

0

Domanda

Ho bisogno di aiuto nella rimozione di sottoquery di istruzione SELECT originale. Questo è anche possibile? Ho bisogno di questo, al fine di spostare le query come questa Denodo/VQL, che non permette sottoquery nelle istruzioni SELECT (ma non permettono CTE/e sottoquery DOVE).

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

Migliore risposta

2

Posso vedere un paio di opzioni. Il più diretto traduzione sembra essere:

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

ma l'uso di un RIGHT OUTER JOIN può essere sconosciuto. Per passare al più familiare LEFT OUTER JOIN abbiamo bisogno di invertire la posizione delle tabelle nella query e modificare come le condizioni sono presentati:

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

Ho mantenuto l'alias lo stesso, così si può vedere come si sono spostati nella query. In entrambe le query m1 è la tabella primaria, che è quella che deve fornire i dati, mentre m2 è secondario o "facoltativo" tabella si può o non si dispone di dati che corrisponde alla primaria.

Personalmente, preferisco che si inserisce nella sottoquery come li trovo più facili da capire, ma YMMV.

2021-11-24 02:01:18

In altre lingue

Questa pagina è in altre lingue

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