#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 EMPID IN ( CASE WHEN 'X' IN (:A, :B, :C, :D, :E) THEN (:A, :B, :C, :D, :E, 'Y') ELSE (:A, :B, :C, :D, :E) )
@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
@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
@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
@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ę.
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 EMPID IN (
CASE WHEN 'X' IN (:A, :B, :C, :D, :E) THEN (:A, :B, :C, :D, :E, 'Y') ELSE (:A, :B, :C, :D, :E)
)
where ('X' IN (:A, :B, :C, :D, :E) and emp_id in (:A, :B, :C, :D, :E, 'Y')) or ('X' NOT IN (:A, :B, :C, :D, :E) and emp_id in (:A, :B, :C, :D, :E))?
a to nie chodzi o coś w stylu:
with pracownicy as (select 'a' pracownik from dual union all
select
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
where? :) u mnie działa w ten sposób (wszystkie stringi traktuj jako placeholdery:)select column_value as pracownikfrom sys.odcivarchar2list('wartość_z_gui_A','wartość_z_gui_B','wartość_z_gui_C','wartość_z_gui_D', 'wartość_z_gui_E')
union
select
wartość_z_innej_kontrolki_w_guinie wpływa to, czy występowała wśród pięciuwartości_z_gui. Na pewno jej tam nie będzie. Ale jedna specyficznawartość_z_guimusi spowodować, żewartość_z_innej_kontrolkizostanie uwzględniona. Mam