Consulta con LEFT JOIN Mysql

publicado por: Anonymous

Tengo tres tablas con los siguientes datos:

varieties

------------------------------------
  id  |   variety        | status  |
------------------------------------
  1   |     VS1          |    1    |
------------------------------------
  2   |     VS2          |    1    |
------------------------------------
  3   |     VS3          |    1    |
------------------------------------
  4   |     VS4          |    1    |
------------------------------------
  5   |     VS5          |    1    |
------------------------------------

units

----------------------------------------------
  id   | id_grouper |   unit     |   status  |
----------------------------------------------
  1    |     13     |     1      |    1      |
----------------------------------------------
  2    |     13     |     2      |    1      |
----------------------------------------------
  3    |     13     |     3      |    1      |
----------------------------------------------
  4    |     13     |     4      |    1      |
----------------------------------------------
  5    |     13     |     5      |    1      |
----------------------------------------------
  6    |     13     |     6      |    1      |
----------------------------------------------
  7    |     13     |     7      |    1      |
----------------------------------------------

sowing

-----------------------------------------------------------------
  id  |  id_grouper | id_unit  |  id_variety  | type  |  status |
-----------------------------------------------------------------
  1   |       13    |    1     |      1       |   SW  |    1    |
-----------------------------------------------------------------
  2   |       13    |    3     |      1       |   SW  |    1    |
-----------------------------------------------------------------
  3   |       13    |    4     |      1       |   SW  |    1    |
-----------------------------------------------------------------
  4   |       13    |    6     |      3       |   SW  |    1    |
-----------------------------------------------------------------
  5   |       13    |    7     |      4       |   ER  |    1    |
-----------------------------------------------------------------

La tabla varieties me muestra variedades, la tabla units son camas y la tabla sowing son simebras, en esta última registra que variedades sembradas hay en cada cama y el tipo de siembra.

El tipo SW siginifica que esta actualmente sembrado y ER que se erradicó

Lo que quiero hacer es mostrar las variedades sembradas en cada cama con type SW y si una cama no esta en la tabla sowing o es type ER que de igual forma me la muestre la cama con variedad NULL de la siguiente manera:

----------------------------------
    unit     |       variety     |
----------------------------------
     1       |         VS1       |
---------------------------------- 
     2       |         NULL      |
---------------------------------- 
     3       |         VS1       |
---------------------------------- 
     4       |         VS1       |
---------------------------------- 
     5       |         NULL      |
---------------------------------- 
     6       |         VS3       |
---------------------------------- 
     7       |         VS4       |
----------------------------------    

Hice la siguiente consulta usando LEFT JOIN pero no me funciona:

SELECT units.unit, varieties.variety
FROM (sowing
LEFT JOIN units ON sowing.id_unit =  units.id)
LEFT JOIN varieties ON sowing.id_variety = varieties.id
WHERE units.id_grouper = 13
AND sowing.type= 'SW'
AND sowing.status = 1
AND units.status = 1
GROUP BY units.id;

me devuelve el siguiente resultado:

----------------------------------
    unit     |       variety     |
----------------------------------
     1       |         VS1       |
---------------------------------- 
     3       |         VS1       |
---------------------------------- 
     4       |         VS1       |
---------------------------------- 
     6       |         VS3       |
---------------------------------- 
     7       |         VS4       |
---------------------------------- 

Soy un poco novato con este tipo de consultas, cualquier comentario o ayuda es bienvenida, espero me entiendan la pregunta.

solución

No puedes colocar en la cláusula WHERE una columna que participa en una combinación LEFT JOIN porque “fuerza” a que la combinación requiera coincidencia.

SELECT u.units, v.variety
FROM       
    units u
    LEFT JOIN sowing s ON u.id = s.id_unit
       AND s.type = 'SW' AND s.status = u.status
    LEFT JOIN varieties v ON s.id_variety = v.id
WHERE u.id_grouper = 13 AND u.status = 1;

Evalúa si es necesario agrupar por las columnas ‘u.units’ y ‘v.variety’.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *