Warunkowe złączenie tabel (inner join tylko w specyficznym przypadku)

Warunkowe złączenie tabel (inner join tylko w specyficznym przypadku)
P1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 77
0

Witam,

Chciałem zrobić taką rzecz. Powiedzmy, że mamy jakiś parametr i od niego zależy czy połączę 2 tabele inner czy left joinem. Myślałem łączyć się left joinem zawsze i tylko w jakiś przypadku dawać odpowiedni warunek w where (np. coś takiego):

Kopiuj
 
SELECT C.CustomerID,V.* FROM Customers C LEFT JOIN Visits V ON C.CustomerID = V.CustomerID
where v.CustomerID is not null

Czyli aktualnie zapytanie jest jakby z inner joinem. Problem w tym, że nie wiem jak zbudować case w where żeby był czasami left join

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
0

W jakim celu jest Ci to konkretnie potrzebne?
Być może w ogóle źle podchodzisz do problemu.

mariano901229
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 597
0

Zawsze można sobie zbudować dynamicznie zapytanie zależnie od przyjętego parametru. Zgaduje jednak, że problem leży od strony aplikacji to znaczy zależnie od parametru wysyłanego z aplikacji chcesz zwrócić inny wynik. To nie możesz tego obsłużyć od strony klienta wysyłającego zapytanie ?

PA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3902
2

nie potrzebujesz case-a
założmy ze parametr masz w zmiennej @innerjoin i dla 1 ma być inner join)

Kopiuj
 
SELECT C.CustomerID,V.* FROM Customers C LEFT JOIN Visits V ON C.CustomerID = V.CustomerID
where 
(@innerjoin=0
or
   (@innerjoin=1 and not v.customerid is null)
)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.