Como posso remover a subconsulta a partir da instrução select?

0

Pergunta

Eu preciso de ajuda na remoção de subconsulta original instrução SELECT. Isso é mesmo possível? Eu estou precisando que este, em última análise mover consultas como esta para Denodo/VQL, o que não permite subconsultas em instruções SELECT (mas não permitem CTE/COM e subconsultas em FROM/WHERE).

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

Melhor resposta

2

Eu posso ver um par de opções. A maioria tradução direta parece ser:

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

mas o uso de um RIGHT OUTER JOIN podem ser desconhecidos. Para mudar para o mais familiar LEFT OUTER JOIN precisamos inverter a posição das tabelas na consulta e alterar a forma como as condições forem apresentados:

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

Eu mantive os aliases mesmo assim você pode ver como elas se movem em torno da consulta. Em ambas as consultas m1 é a tabela primária, o que é, é o que deve fornecer os dados, enquanto m2 é secundário ou "opcional" tabela - pode ou não pode ter dados que corresponde ao principal.

Pessoalmente, eu prefiro junta mais de subconsultas como eu encontrá-los mais fáceis de entender, mas YMMV.

2021-11-24 02:01:18

Em outros idiomas

Esta página está em outros idiomas

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