2015-07-11 2 views
1

Je fais un site de commerce électronique où j'ai un panneau d'administration pour contrôler le site.Erreur: Non unique table/alias: 'entreprises' Base de données (erreur): 1066

Tout en activant les filtres pour les catégories et produits à partir du panneau d'administration, cette requête 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 

ventile et me montre erreur:

Not unique table/alias: 'companies' Database (error): 1066

Quelqu'un peut-il aider à trouver l'erreur dans cette requête?

Merci à l'avance :)

+0

Vous vous joignez à 'company 'mais l'alias utilisé pour la deuxième instance est' companies', ce qui est en conflit avec le nom de la première instance. –

Répondre

0

Vous rejoignez avec entreprises table deux fois. C'est bien, mais vous devez les alias différemment.

La première jointure ne porte pas d'alias, elle est donc appelée pareil; entreprises. La seconde est aliasing mais avec le même nom entreprises, et cela provoque un conflit.

Essayez comme une bonne pratique alias à la fois avec des noms différents, par exemple entreprises1 et sociétés2 (ou mieux encore, d'autres noms plus significatifs) et de mise à jour cours en conséquence toutes vos références de table dans votre sélection, joint , où, groupe et ordre.

+1

Une bonne pratique consiste à utiliser des abréviations pour les noms de table, de sorte que la requête SQL n'est pas si lourde. «c1» et «c2» ou «co1» et «co2». –