Lewy SQL Dołącz utratę wierszy po filtrowaniu

Mam połączenie wielostołowe (tylko dwa pokazane w przykładzie), w którym muszę zachować wszystkie wiersze z tabeli podstawowej. Oczywiście używam LEFT JOIN, aby uwzględnić wszystkie wiersze w tabeli podstawowej. Bez klauzuli WHERE działa świetnie - gdy wiersz nie istnieje w tabeli Right, wiersz z tabeli Left nadal jest wyświetlany, tylko z 0 z kolumny w tabeli Right. Pierwsze dwa wiersze w zestawie danych to Etykiety z lewej tabeli i Liczba wierszy z prawej tabeli pogrupowane według etykiety. Wszystko, czego chcę, to liczba 0, gdy etykieta nie ma przypisanej wartości z tabeli 2.

Tabela 1

Label | FK
----------
Blue  | 1
Red   | 2
Green | 3

Tabela 2

Values | Color | Date
---------------------------
Dog    | 1     | 02/02/2010
Cat    | 2     | 02/02/2010
Dog    | 1     | 02/02/2010
Cat    | 2     | 02/02/2010

Pytanie:

SELECT 1.Label, COUNT(2.values)
FROM Table1 1
    LEFT JOIN Table2 2 ON 1.fk = 1.pk
GROUP BY 1.Label

Dobry zestaw wyników - brak filtrów

Blue  | 2
Red   | 2
Green | 0

Świetny!

Moim problemem jest to, że gdy dodam kryteria filtrowania, aby usunąć wiersze z tabeli Right, wiersz zostanie usunięty dla moich lewych wierszy łączenia (zerowanie ich), a lewe wiersze zostaną usunięte. Muszę pozostawić lewe wiersze, nawet jeśli ich liczba jest filtrowana do zera.

SELECT 1.Label, COUNT(2.values)
FROM Table1 1
    LEFT JOIN Table2 2 ON 1.fk = 1.pk
WHERE 2.Date BETWEEN '1/1/2010' AND '12/31/2010'    
GROUP BY 1.Label

Zestaw wyników bummer - po filtrach

Blue | 2
Red  | 2

Książęta!

Więc co do diabła? Czy muszę uzyskać tabelę tymczasową z przefiltrowanym zestawem danych, a następnie dołączyć ją do tabeli Left? czego mi brakuje? Dzięki!

Wykonaj drugie połączenie lub rekurencyjne połączenie. Zdobądź mój „dobry” stolik łączący, zdobądź drugi „przefiltrowany” stół, a następnie LEWO DOŁĄCZ do nich

questionAnswers(4)

yourAnswerToTheQuestion