我正在制作一个电子商务网站,其中有一个管理面板来控制该网站。

从管理面板激活类别和产品的过滤器时,此sql查询:

SELECT COUNT(DISTINCT products.product_id) AS products,
       companies.company AS range_name,
       UPPER(SUBSTRING(companies.company, 1, 1)) AS `index`,
       companies.company_id AS range_id,
       'S' AS field_type
FROM products
LEFT JOIN companies ON companies.company_id = products.company_id
INNER JOIN products_categories ON products_categories.product_id = products.product_id
LEFT JOIN categories ON categories.category_id = products_categories.category_id
LEFT JOIN companies AS companies ON companies.company_id = products.company_id
WHERE products.status IN ('A')
  AND products_categories.category_id IN (261)
  AND (categories.usergroup_ids = ''
       OR FIND_IN_SET(0, categories.usergroup_ids)
       OR FIND_IN_SET(1, categories.usergroup_ids))
  AND (products.usergroup_ids = ''
       OR FIND_IN_SET(0, products.usergroup_ids)
       OR FIND_IN_SET(1, products.usergroup_ids))
  AND categories.status IN ('A',
                            'H')
  AND products.status IN ('A')
  AND (companies.status = 'A')
GROUP BY products.company_id
ORDER BY companies.company


崩溃并显示错误:


  非唯一表/别名:“ companies”数据库(错误):1066


谁能帮忙找到此查询中的错误?

提前致谢 :)

最佳答案

您正在两次加入company表。很好,但是您必须对它们使用不同的别名。

第一个连接没有别名,因此称为“别名”。公司。第二个是别名,但公司名称再次相同,这引起了冲突。

作为一种好习惯,请尝试使用不同的名称(例如,company1和companies2)(或更好的是,任何其他更有意义的名称)进行别名,当然还要在选择,联接,位置,组和顺序中相应地更新所有表引用。

10-07 19:17
查看更多