SQL Left Join теряет строки после фильтрации

У меня есть объединение нескольких таблиц (только два показаны в примере), где мне нужно сохранить все строки из базовой таблицы. Очевидно, я использую LEFT JOIN, чтобы включить все строки в базовую таблицу. Без предложения WHERE это прекрасно работает - когда строка не существует в правой таблице, строка из левой таблицы все еще отображается, только с 0 из столбца в правой таблице. Первые две строки в наборе данных - это метки из левой таблицы и количество строк из правой таблицы, сгруппированные по меткам. Все, что я хочу, - это счет 0, если метка не имеет значения из таблицы 2.

Таблица 1

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

Таблица 2

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

запрос:

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

Хороший результат - Нет фильтров

Blue  | 2
Red   | 2
Green | 0

Большой!

Моя проблема заключается в том, что когда я добавляю критерии фильтрации для удаления строк из правой таблицы, строка удаляется для моих строк левого соединения (обнуляя их), левые строки удаляются. Мне нужно, чтобы левые строки оставались, даже если их количество фильтруется до нуля.

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

Набор результатов Bummer - после фильтров

Blue | 2
Red  | 2

Придурки!

Так что, черт возьми? Нужно ли мне получить временную таблицу с отфильтрованным набором данных, ТОГДА присоединить ее к левой таблице? Что мне не хватает? Спасибо!

Сделайте второе соединение или рекурсивное соединение. Получите мою «хорошую» таблицу соединений, получите вторую «отфильтрованную» таблицу, затем СЛЕДУЙТЕ СОЕДИНИТЬ их

Ответы на вопрос(4)

Ваш ответ на вопрос