特殊SQL查询生成

特殊SQL查询生成,sql,Sql,我需要从制造商的数据库列表(表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 = p

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


有什么想法吗?谢谢

尝试从where子句中删除
prz.produkty_id=pr.id
,因为这看起来像是在试图使制造商id等于产品id。

尝试从where子句中删除
prz.produkty_id=pr.id
,因为这看起来像是在试图使制造商id等于产品id

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)
确保您具有以下索引:

produkty (producenci_id)
przyporzadkowania (kategorie_id, produkty_id)
  • 删除
    WHERE
    中的
    prz.produkty\u id=pr.id
  • 所有表都应该使用
    内部联接
    而不是
    左联接
  • 删除
    WHERE
    中的
    prz.produkty\u id=pr.id
  • 所有表都应该使用
    内部联接
    而不是
    左联接