La consulta cruza todas las tablas partiendo de la MARKETS (obviamente es la que siempre debe contener algo, porque sino ¿qué buscas?), y devuelve una tabla qmue puede o no tener coincidencias con PRODUCTOS y CIUDADES; no importa, de todos modos devolverá los ID de los comercios.
El WHERE hace que de estas devuelva todos los casos en que la URL no sea NULL, esto es, donde el campo contenga algo. Para afinarlo y que descarte todos aquellos registros donde haya un caracter vacío, debería ser:
Código sql:
Ver originalSELECT
M.market_id, M.market_direccion. CI.ciudad_nombre, M.market_url
FROM
markets M INNER JOIN combinada C ON C.comb_market_id = M.market_id
INNER JOIN ciudades CI ON C.comb_ciudad_id = CI.ciudad_id
LEFT JOIN productos P ON C.comb_prod_id = P.prod_id
WHERE
P.prod_producto LIKE '%alimentos para perro%' AND
(M.market_url IS NOT NULL OR M.market_url != '') ;
El WHERE además considera que contenga la frase "alimentos para perro" antecedida o precedida de cualquier cosa. Si se quiere que sea con esa frase en el producto, o con website o con los dos, el AND se suplanta por OR:
Código sql:
Ver originalSELECT
M.market_id, M.market_direccion. CI.ciudad_nombre, M.market_url
FROM
markets M INNER JOIN combinada C ON C.comb_market_id = M.market_id
INNER JOIN ciudades CI ON C.comb_ciudad_id = CI.ciudad_id
LEFT JOIN productos P ON C.comb_prod_id = P.prod_id
WHERE
P.prod_producto LIKE '%alimentos para perro%' OR
(M.market_url IS NOT NULL OR M.market_url != '') ;
Cualquier otra posibilidad, hay que estudiarla según el caso.
En ese sentido, es muy habitual crear estas sentencias en forma dinámica según el tipo de filtrado que se requiere, aunque el JOIN se mantenga.