parent nodes: SQLapuntes

CondicionesJOIN

05/09/2017
Fuente: Josep Martínez


Problema





Diagnóstico

Solución

Mal: Condición en el WHERE

-- Las condiciones del WHERE se han de cumplir siempre.
-- Como la tabla INV no tiene registros con el impuesto NOR_EST, no cumple el WHERE y no lo incluye en el resultado.
-- Resultado 5 registros, NO incluye NOR_EST pues no cumple el WHERE
SELECT tax.TAXITEMGROUP, tax.NAME, COUNT(inv.RECID) AS CONTADOR, 
	CASE inv.MODULETYPE WHEN 0 THEN 'Inventario' WHEN 1 THEN 'Compras' WHEN 2 THEN 'Ventas' ELSE '***' END AS Tipo
FROM TaxItemGroupHeading tax
	lefT JOIN InventTableModule inv
	ON  tax.TAXITEMGROUP = inv.TAXITEMGROUPID 
	AND tax.DATAAREAID = inv.DATAAREAID
WHERE inv.DATAAREAID = 'COL'
GROUP BY  tax.TAXITEMGROUP, tax.NAME, inv.MODULETYPE 

Bien: Condición en el JOIN

-- Las condiciones del LEFT JOIN no se han de cumplir si la tabla de la izquierda no tiene registros
-- Resultado: 6 registros, incluyendo NOR_EST con contador cero
SELECT tax.TAXITEMGROUP, tax.NAME, COUNT(inv.RECID) AS CONTADOR,
	CASE inv.MODULETYPE WHEN 0 THEN 'Inventario' WHEN 1 THEN 'Compras' WHEN 2 THEN 'Ventas' ELSE '***' END AS Tipo
FROM TaxItemGroupHeading tax
	lefT JOIN InventTableModule inv
	ON  tax.TAXITEMGROUP = inv.TAXITEMGROUPID 
	AND tax.DATAAREAID = inv.DATAAREAID
	AND inv.DATAAREAID = 'COL'
GROUP BY  tax.TAXITEMGROUP, tax.NAME, inv.MODULETYPE 




[camelCaseWordsEnabled: false]