MySQL: IZQUIERDA UNIR ... ¿seleccionar todo de la tabla 1, incluso si no está allí en la tabla 2?
Pregunta
Me estoy uniendo a algunas tablas para una selección
Si no hay nada que coincida en las tablas 2ª, 3ª y 4ª, todavía quiero obtener los resultados siempre que la primera tabla tenga una coincidencia. Pensé que LEFT JOIN hizo esto, pero no lo es.
Aquí está la consulta completa:
SELECT cart_product.*, prod_drop_products.prod_drop_product_name, everlon_sheet.*, cart_product.product_id AS product_id
FROM cart_product
LEFT JOIN everlon_sheet ON cart_product.product_id = everlon_sheet.product_id
LEFT JOIN prod_drop_products ON cart_product.product_id = prod_drop_products.product_id
LEFT JOIN prod_drop ON prod_drop.prod_drop_id = prod_drop_products.prod_drop_id
WHERE prod_drop.prod_drop_name = "Carat Weight" AND cart_product.product_brand = "everlon"
ORDER BY cart_product.product_manufacturer_num
que obtiene 316 resultados
Aquí está la consulta sin las uniones:
SELECT cart_product.*
FROM cart_product
WHERE cart_product.product_brand = "everlon"
ORDER BY cart_product.product_manufacturer_num
que obtiene 362 resultados
Tengo una corazonada de que esto está sucediendo debido a mi DONDE prod_drop.prod_drop_name = " Peso en quilates " en la pregunta ÚNETE. Pero, ¿hay alguna forma de obtener lo que necesito en mi consulta anterior pero aún obtener todo de la primera tabla (la más a la izquierda, cart_product) incluso si nada coincide en las otras tablas?
¡Gracias!
Solución
Si no hay coincidencia en el lado derecho, prod_drop.prod_drop_name será nulo
Agregar OR prod_drop.prod_drop_name IS NULL debería solucionar su problema.
Otros consejos
prueba
WHERE prod_drop.prod_drop_name = "Carat Weight" or prod_drop.prod_drop_name is null
Cambiar
WHERE prod_drop.prod_drop_name = "Carat Weight" AND cart_product.product_brand = "everlon"
a
WHERE (prod_drop.prod_drop_name = "Carat Weight" OR prod_drop.prod_drop_name IS NULL) AND cart_product.product_brand = "everlon"
La consulta ahora también devolverá una coincidencia si no hay un valor coincidente en prod_drop.