¿Por qué mi resultado está vacío cuando uso esta consulta?

¿Por qué mi resultado está vacío cuando uso esta consulta?

Obtengo productos y una categoría a la que pertenece el producto para mostrarlos en una página. También obtengo algunos datos pertenecientes al producto que está en una tabla diferente.

Mi consulta se ve así:

SELECT cnt.id as content_id, cnt.title as content_title, cnt.featured, cnt.alias as content_alias, cnt.catid, cnt.images, cnt.state, cnt.introtext, cat.id as cat_id, cat.title as cat_title, cat.alias as cat_alias,
MAX(case when f.field_id = 4 then f.value end) as prijs,
MAX(case when f.field_id = 5 then f.value end) as prijsoud
FROM snm_fields_values f
JOIN snm_content cnt
ON cnt.id = f.item_id
JOIN snm_categories cat
ON cnt.catid = cat.id
WHERE cnt.catid = '17'
AND cnt.state = 1
GROUP BY f.item_id

Mi problema es que cuando una categoría no tiene ningún artículo, todos los resultados están vacíos. Entonces, en una página de categoría donde no hay productos que pertenezcan a esa categoría, tampoco muestra el título de la categoría.

Solo cuando una categoría tiene un producto (snm_content) debajo, muestra todos los datos.

La consulta anterior devuelve lo siguiente:

ingrese la descripción de la imagen aquí

No hay productos bajo catid 17.

Cuando lo cambio a 16 (que tiene productos) este es mi resultado:

ingrese la descripción de la imagen aquí

Me gustaría obtener todos los datos que hay allí, así que cuando una categoría no tiene productos, todavía necesito el título de la categoría.

¿Por qué todo está vacío cuando un producto no existe?

Mostrar la mejor respuesta

Eche un vistazo a las uniones izquierda y derecha. Incluirán filas en una tabla principal cuando no existan filas en una tabla secundaria.

Ha utilizado equi join (w3resource.com/sql/joins/ perform-an-equi-join.php) que básicamente devuelve datos que cumplen las mismas condiciones que mencionó en la cláusula where. Por lo tanto, debe usar LEFT OUTER JOIN o RIGHT OUTER JOIN para devolver datos no equi. Consulte (w3schools.com/sql/sql_join_left.asp)

@SloanThrasher Intenté usar ambos, pero no importa qué, obtengo un resultado vacío. Probé tanto LEFT/RIGHT JOIN como LEFT OUTER/RIGHT OUTER JOIN pero no obtuve resultados.

Usa GROUP BY correctamente. Ni siquiera es un GROUP BY válido. Todas esas columnas no agregadas deben estar en la cláusula GROUP BY.

Creo que desea uniones externas. No entiendo completamente el GROUP BY, pero esto puede hacer lo que quieras:

SELECT cnt.id as content_id, cnt.title as content_title, cnt.featured, cnt.alias as content_alias, cnt.catid, cnt.images, cnt.state, cnt.introtext, cat.id as cat_id, cat.title as cat_title, cat.alias as cat_alias,
       MAX(case when f.field_id = 4 then f.value end) as prijs,
       MAX(case when f.field_id = 5 then f.value end) as prijsoud
FROM snm_categories cat LEFT JOIN
     snm_content cnt
     ON cnt.catid = cat.id AND cnt.state = 1 LEFT JOIN
     snm_fields_values f 
     ON cnt.id = f.item_id 
WHERE cat.id = 17
GROUP BY cnt.id, cnt.title, cnt.featured, cnt.alias, cnt.catid, cnt.images, cnt.state, cnt.introtext, cat.id, cat.title, cat.alias

cat.catid necesita ser cnt.catid pero cuando lo uso todavía obtengo un resultado vacío.

@twan. . . Debería ser cat.id.