2012-11-06 18 views
6

Powiedzmy mam zapytanie tak:Where na podzapytanie oświadczenie w wybranej

Select col1, 
      col2, 
      (select count(smthng) from table2) as 'records' 
    from table1 

Chcę filtrować go nie być null dla kolumny 'Records.

Nie mogę tego zrobić:

  Select col1, 
       col2, 
       (select count(smthng) from table2) as 'records' 
      from table1 
     where records is not null 

Najlepszym wymyśliłem to napisać resultset do parametru Wartość Stół i mają oddzielne zapytanie na tym wynikowego. Jakieś pomysły?

+0

@RichardTheKiwi Twoje zapytanie jest idealne, ale zredagowałem je, aby było krótsze. Wybierz X. * z (Wybierz kol1, col2, (wybierz ..... z tabeli2) jako rekordy z tabeli1) X, gdzie rekordy nie są puste; –

Odpowiedz

9

Wystarczy przesunąć go do zapytania pochodzą. Nie można użyć kolumny zdefiniowanej w klauzuli SELECT w klauzuli WHERE.

Select col1, col2, records 
from 
(
    Select col1, 
      col2, 
      (select ..... from table2) as records 
    from table1 
) X 
where records is not null; 
3

należy zrobić kilka małych modyfikacji tam:

Przede wszystkim, należy dodać klauzulę TOP na podzapytaniu zmusić zapytanie do powrotu tylko jeden zapis tego Table2. Podzapytanie takie jak to, które masz, powinno zwracać tylko wartość skalarną.

Po drugie, podzapytanie może mieć tylko jedną kolumnę na liście kolumn, więc ponownie wartość zwracana powinna być skalarna.

Na koniec nie można filtrować podzapytania ani żadnej z utworzonych kolumn w klauzuli select. Tak więc, moim zaleceniem jest użycie "join" s lub "exists".

Select col1, 
     col2 
     from table1 
     left outer join 
      table2 
     on table1.key = table2.key 
     where not table2.key is null 

Albo to:

Select col1, 
     col2 
     from table1 
     inner join 
      table2 
     on table1.key = table2.key 

Albo ten:

Select col1, 
     col2 
     from table1 
     where exists (
      select * 
        from table2 
        where table2.key = table1.key 
        and not table2.somethingelse is null 
        -- or any other relevant conditions 
     ) 

Cheers

+0

Podaje "niepoprawne nazwy kolumn" w klauzuli Where – user194076

+0

. Przepraszam, proszę pana. Zobacz zaktualizowany post ponownie. Dziękuję Ci. – Rikki

Powiązane problemy