Jak mogę usunąć podzapytanie z instrukcji select?

0

Pytanie

Potrzebuję pomocy w usunięciu podrzędnego z oryginalnej instrukcji SELECT. Czy to możliwe w ogóle? Mi jest to potrzebne, aby w końcu przenieść podobne wnioski w Denodo/VQL, który nie zezwala na podzapytania w instrukcjach SELECT (ale umożliwia CTE/Z i podzapytania w / SKĄD).

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

Najlepsza odpowiedź

2

Widzę kilka opcji. Najbardziej bezpośrednim tłumaczeniem, najwyraźniej, jest:

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 korzystanie z RIGHT OUTER JOIN być może nie znał. Aby przełączyć się na bardziej znane LEFT OUTER JOIN musimy zmienić położenie tabel w kwerendzie i zmienić sposób prezentacji warunków:

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

Zachowałem aliasy takie same, więc można zobaczyć, jak poruszały się w zapytaniu. W obu zapytaniach m1 jest główną tabelą, czyli ta, która powinna dostarczyć dane, podczas gdy m2 jest drugorzędny lub "zbędne" tabeli - w niej mogą być lub nie być dane, odpowiadające głównym.

Osobiście wolę zjednoczenia подзапросам, ponieważ uważam je bardziej zrozumiałe, ale YMMV.

2021-11-24 02:01:18

W innych językach

Ta strona jest w innych językach

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