2017-02-07 35 views
5

Obecnie próbuję wykonać zapytanie SQL, które może wykryć, czy zapytanie SELECT nic nie zwraca, a następnie wykonać inne, jeśli tak jest.SQL - If Select nic nie zwraca, a następnie wykonaj inne Wybierz

Oto co mam na myśli:

IF SELECT * FROM table WHERE criteria = criteria RETURNS NO ROWS 
THEN SELECT * FROM table WHERE criteria2 = criteria2 

Czy to możliwe? Nie sądzę, że pusta odpowiedź jest "zerowa", więc mam z tym problem.

+4

Jakiej konkretnej bazy danych używasz? –

+0

Używam PostgreSQL. Rozwiązanie poniżej działało z nim. –

Odpowiedz

6

Można to zrobić w jednym sprawozdaniu, zakładając, że kolumny są takie same:

SELECT * 
FROM table 
WHERE criteria = criteria 
UNION ALL 
SELECT * 
FROM table 
WHERE criteria2 = criteria2 AND 
     NOT EXISTS (SELECT 1 FROM table WHERE criteria = criteria); 
+0

Dzięki Gordon, to naprawdę działało ładnie. Jesteś bestią. :) –

3

Można użyć NOT EXISTS:

SELECT * FROM table WHERE criteria2 = criteria2 
and not exists (
    SELECT * FROM table WHERE criteria = criteria 
) 
union all 
SELECT * FROM table WHERE criteria = criteria; 

Tutaj NOT EXISTS zapewnia, że ​​zarówno część UNION ALL jest zwracana . Jeśli drugi criteria = criteria przejdzie, wtedy NOT EXISTS zwróci false, a zatem tylko druga część powyższego zapytania zwróci wynik. Jeśli nie, oznacza to, że nie ma wierszy z criteria = criteria, a NOT EXISTS zwróci wartość true, a zatem tylko pierwsza część zwróci dane.

+0

Dzięki za wyjaśnienie, Gurwinder. :) Ułatwiłem zrozumienie. –