我需要从数据库制造商列表(table producenci)中检索,但仅从特定产品类别中检索。实际查询看起来像这样,但它返回0条记录。如果我删除WHERE,它将返回整个表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
重要的表格字段:
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
有什么想法吗?感谢
答案 0 :(得分:2)
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
确保您拥有以下索引:
produkty (producenci_id)
przyporzadkowania (kategorie_id, produkty_id)
答案 1 :(得分:1)
尝试从where子句中删除prz.produkty_id = pr.id
,因为您试图使制造商ID等于产品ID。
答案 2 :(得分:0)
prz.produkty_id = pr.id
中的WHERE
。INNER JOIN
代替LEFT JOIN