¿Cómo puedo quitar la subconsulta de la instrucción select?

0

Pregunta

Necesito ayuda en la eliminación de la subconsulta de la original de la instrucción SELECT. Esto es incluso posible? Yo estoy necesitando este en última instancia, mover las consultas como esta para Denodo/VQL, que no permite que las subconsultas en las instrucciones SELECT (pero no permiten CTE/CON y subconsultas en DE/DONDE).

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

Mejor respuesta

2

Puedo ver un par de opciones. La mayoría de traducción directa 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%'

pero el uso de un RIGHT OUTER JOIN puede ser desconocido. Para cambiar a la más familiar LEFT OUTER JOIN tenemos que invertir la posición de las tablas en la consulta y alteran la forma de las condiciones que se presentan:

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

Me quedé con el alias de el mismo, de modo que puede ver cómo se movían alrededor de la consulta. En ambas consultas m1 es la tabla principal, es decir, es la que debe proporcionar los datos, mientras que m2 es la secundaria o "opcional" tabla - puede o no puede tener datos que coincide con la principal.

Personalmente, prefiero que se une a más de subconsultas como me parece más fácil de entender, pero YMMV.

2021-11-24 02:01:18

En otros idiomas

Esta página está en otros idiomas

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