Reputation: 5297
I need to retrieve from database list of manufacturers (table producenci), but only from particular products category. Actual query looks like this, but it returns 0 records. If I remove WHERE, it returns whole table producenci.
SELECT DISTINCT (
pr.id
), pr.nazwa
FROM producenci pr
LEFT JOIN produkty ON pr.id = produkty.producenci_id
LEFT JOIN przyporzadkowania prz ON produkty.id = prz.produkty_id
LEFT JOIN kategorie k ON k.id = prz.kategorie_id
WHERE prz.produkty_id = pr.id
AND prz.kategorie_id = '16'
ORDER BY pr.nazwa
Important tables fields:
producenci - id INT, name VARCHAR
przyporzadkowania - id INT, kategorie_id INT, subkategorie_id INT, sub_subkategorie_id INT, produkty_id INT
kategorie - id INT, nazwa VARCHAR
produkty - id INT, nazwa VARCHAR
Any ideas? Thanks
Upvotes: 0
Views: 88
Reputation: 37374
prz.produkty_id = pr.id
in WHERE
.INNER JOIN
instead of LEFT JOIN
Upvotes: 0
Reputation: 425573
SELECT pr.id, pr.nazwa
FROM producenci pr
WHERE pr.id IN
(
SELECT produkty.producenci_id
FROM produkty
JOIN przyporzadkowania prz
ON prz.produkty_id = produkty.id
WHERE prz.kategorie_id = '16'
)
ORDER BY
pr.nazwa
Make sure you have the following indexes:
produkty (producenci_id)
przyporzadkowania (kategorie_id, produkty_id)
Upvotes: 2
Reputation: 36999
Try removing prz.produkty_id = pr.id
from the where clause as this looks like you are trying to make the manufacturer ID equal to the product ID.
Upvotes: 1