Wpis z mikrobloga

#sql #oracle #naukaprogramowania #programowanie
jak zrobić takiego CASE we WHERE żeby
jeśli idpracownika jest w zbiorze (:A, :B, :C, :D, :E) to dodaj do tego zbioru jeszcze jednego pracownika i zwróć wszystkich?

może mój niedziałający kod pokaże, o co mi chodzi
WHERE EMP
ID IN (
CASE WHEN 'X' IN (:A, :B, :C, :D, :E) THEN (:A, :B, :C, :D, :E, 'Y') ELSE (:A, :B, :C, :D, :E)
)
  • 11
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@janek_: no wlaśnie mało koleś wytlumaczyl co chce zrobić. Też bym kombinował z "with pracownicy as"
I tak przy okazji zamiast robic oddzielne selecty from dual z unionami np. w oraclu mozna zrobic cos takiego:
select * FROM sys.odcivarchar2list('A','B','C','D', 'E');

są wbudowane funkcje które ci z listy zrobią wygodnego selecta
  • Odpowiedz
@wankstain: ale po co where? :) u mnie działa w ten sposób (wszystkie stringi traktuj jako placeholdery:)

select column_value as pracownik
from sys.odcivarchar2list('wartość_z_gui_A','wartość_z_gui_B','wartość_z_gui_C','wartość_z_gui_D', 'wartość_z_gui_E')
union
select
  • Odpowiedz
via Wykop Mobilny (Android)
  • 0
@janek_: chodziło mi o to, że muszę wyselectować jakieś info o 5 pracownikach podanych w gui. Z tym, że jeśli wśród tych pięciu jest pracownik X, to dodatkowo wyciągnij info o jeszcze jednym, Y, którego nie dało się wybrać w gui. Na select wartość_z_innej_kontrolki_w_gui nie wpływa to, czy występowała wśród pięciu wartości_z_gui. Na pewno jej tam nie będzie. Ale jedna specyficzna wartość_z_gui musi spowodować, że wartość_z_innej_kontrolki zostanie uwzględniona. Mam
  • Odpowiedz
@wankstain: Mała wskazówka co do wydajności Twoich zapytań - nie przekazuj dynamicznych wartości jako parametrów do IN... Baza każde takie zapytanie z inną liczbą elementów będzie traktowała jako oddzielne, co może skutkować przeróżnymi problemami. Lepiej wsadzić to w listę, użyć JSON_TABLE lub użyć funkcji "pipelined table" jeśli piszesz SQL typowo pod aplikację.
  • Odpowiedz