2011-06-24 9 views
11

Zasadniczo, jaki syntex pozwoliłby mi uzyskać tytuł oświadczenia?SQL, jeśli instrukcja select nie zwraca żadnych wierszy, a następnie wykonaj alternatywną instrukcję select

If (select statement 1) returns 0 rows THEN (select statement 2) else (select statement 3) 

Więc SQL zwraca wyniki z obu oświadczeniem 2 lub 3 szukałem sposobu, aby to zrobić, ale nic nie znalazłem do tej pory wydaje się dokładnie zająć się czy wymagań.

+1

dziwny cel. jaki jest jej fizyczny sens? – heximal

+0

które RDBMS? chcesz to zrobić w czystym sql lub jako część skryptu? – davek

+0

Czy masz na myśli "jeśli nie wiersze z 1. wybierz, użyj 2nd wybierz", zamiast usign 3 tabele? I wszystkie zestawy wyników mają ten sam kształt (nie zmieniałbyś zestawu wyników dynamicznie, ponieważ kontrakt się zmienia.) – gbn

Odpowiedz

17
IF EXISTS (SELECT field FROM table) 
BEGIN 
SELECT field FROM table2 
END 
ELSE 
BEGIN 
SELECT field FROM table3 
END 
0

Proszę bardzo ...

IF ((select count(*) from table1)= 0) 
BEGIN 
Select * from table2 
END 
ELSE 
BEGIN 
SELECT * from table3 
END 
+2

Większość optymalizatorów jest wystarczająco inteligentnych, aby zakończyć ocenę klauzuli "EXISTS", gdy tylko pojawi się jeden pasujący wiersz. Niektórzy optymalizatorzy są zbyt głupi, aby zdać sobie sprawę, że planujesz porównać 'COUNT (*)' z 0, i oceni wszystkie wiersze, aby obliczyć liczbę. –

+0

Zgoda ... jeśli 0 to wszystko, z czym chcemy się porównywać; EXISTS ma wszystko, co ma sens! Pomogą w tym inne przypadki. – Gans

1

Przepraszamy za brak informacji zwrotnej. Ktoś inny w biurze zainteresował się i wymyślił:

select * from (
     select * 
       , (SELECT Count(*) 
        FROM users 
        WHERE version_replace = 59 AND moderated = 1) AS Counter 
      FROM users WHERE version_replace = 59 AND moderated in (0,1) 
    ) AS y 
where Counter = 0 and Moderated = 0 
    or Counter > 0 and Moderated = 1 
ORDER By ID DESC 

Co robi, czego potrzebuję.

+0

Wydaje się nieco skomplikowane, ale pasuje do wymagań ... – ChrisBint

Powiązane problemy