views:

26

answers:

3

Hello. 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

+1  A: 

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.

ar
+2  A: 
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)
Quassnoi
A: 
  1. Remove prz.produkty_id = pr.id in WHERE.
  2. All tables should be joined using INNER JOIN instead of LEFT JOIN
a1ex07