Как исключить определенное значение в моем запросе sql?

У меня есть следующий запрос, который выводит все правильно, за исключением того, что мне не нужна одна из строк, которые он мне дает:

SELECT r.Region_Cd, r.Region_Desc, 
COUNT(a.Region) AS Count
FROM Region r
--WHERE r.Region_Desc <> "Unspecified"
LEFT JOIN HU_UNIT_STATE_LEVEL a ON r.Region_Cd = a.Region
GROUP BY r.Region_Cd, r.Region_Desc;

Я хотел бы исключить записи, в которых r.Region_Desc имеет значение «Не указано», но я не уверен, куда поместить пункт. Я закомментировал строку, которая, как я думал, поможет, но в итоге выдало мне ошибку. Могу ли я также получить объяснение, почему мой текущий запрос не имеет смысла?


person user209306    schedule 15.04.2013    source источник


Ответы (3)


Используйте условие where после соединения.

SELECT r.Region_Cd, r.Region_Desc, 
COUNT(a.Region) AS Count
FROM Region r
LEFT JOIN HU_UNIT_STATE_LEVEL a ON r.Region_Cd = a.Region
WHERE r.Region_Desc <> 'Unspecified'
GROUP BY r.Region_Cd, r.Region_Desc
person hkutluay    schedule 15.04.2013

Мы не можем написать условие where для родительской таблицы, из которой мы пытаемся присоединиться к другим таблицам. Но мы можем написать условие с другими соединяемыми таблицами. поэтому используйте условие после соединения.

SELECT r.Region_Cd, r.Region_Desc, 
COUNT(a.Region) AS Count
FROM Region r
LEFT JOIN HU_UNIT_STATE_LEVEL a ON r.Region_Cd = a.Region
WHERE r.Region_Desc <> 'Unspecified'
GROUP BY r.Region_Cd, r.Region_Desc   
person swetha    schedule 15.04.2013

Принимая во внимание производительность, вы должны использовать что-то вроде этого.

SELECT r.Region_Cd, r.Region_Desc, 
COUNT(a.Region) AS Count
FROM Region r
LEFT JOIN HU_UNIT_STATE_LEVEL a ON r.Region_Cd = a.Region and r.Region_Desc <> "Unspecified"
GROUP BY r.Region_Cd, r.Region_Desc;
person Amit Sharma    schedule 15.04.2013