特殊SQL查询构建

时间:2010-08-18 15:42:33

标签: sql

我需要从数据库制造商列表(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

有什么想法吗?感谢

3 个答案:

答案 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)

  1. 移除prz.produkty_id = pr.id中的WHERE
  2. 应使用INNER JOIN代替LEFT JOIN
  3. 加入所有表格