[MSSQL2005] Zap. które zwróci rekordy będące w tabeli, jeśli

0

Cześć, chodzi mi o coś takiego, że:
Mam dwie tabele, które wyglądają jakoś tak:

TAB1
ID - klucz główny
inne pola

TAB2
ID - klucz główny
empID bigint
tab1ID bigint - odnosi się do TAB1 logicznie

I teraz tak.
Pobieram sobie rekordy z TAB1, ale z pewnymi warunkami.
Jeśli w TAB2 są rekordy dla empID = 10, to wtedy pobieram tylko z tej puli. W innym wypadku pobieram wszystkie z TAB1.

Przykład:
Przypadek 1

Tabela TAB1 zawiera 3 rekordy:
ID = 1, ID = 2, ID = 3

Tabela TAB2 nie zawiera żadnych rekordów.

Zapytanie zwraca mi wszystkie 3 rekordy z tabeli TAB1.

Przypadek 2:
Tabela TAB1 zawiera 3 rekordy:
ID = 1, ID = 2, ID = 3

Tabela TAB2 zawiera 2 rekordy:
tab1ID = 1, tab1ID = 3

Zapytanie zwraca mi da rekordy z tabeli TAB1:
ID = 1 i ID = 3

Próbowałem coś w ten deseń:

select * from tab1
where ID in(case when (select count(ID) from tab2 where empID = 10)>0 then
		  (select tab1ID from tab2 where empID = 10)
		  else
		 (select ID from tab1) end)

Ale to nie działa.
Oczywiście chciałbym, żeby to zapytanie było jak najbardziej optymalne. Jak coś takiego zrobić?

AHA, to musi być jako warunek w WHERE

0
IF EXISTS (SELECT Tab1Id FROM Tabela2)
  SELECT * FROM Tabela1 T1, Tabela2 T2 WHERE T1.id = T2.Tab1Id
ELSE
  SELECT * FROM Tabela1 T1

powinno pomodz. Ewentualnie skoryguj zapytanie do logiki jaka masz

0

Ja to muszę mieć w warunku WHERE, że ma pobierać z takich idków, lub wszystkich.

0
SELECT t1.ID
FROM Tabela1 t1
WHERE 
t1.ID IN (SELECT tab1ID FROM Tabela2) OR 
t1.ID NOT IN (SELECT tab1ID FROM Tabela2) AND 0 = (SELECT COUNT(tab1ID) FROM Tabela2);
0

Jesteś WIELKI! Ogromne dzięki!

1 użytkowników online, w tym zalogowanych: 0, gości: 1