2017-07-07 2 views
0

Les jointures ont toujours été délicates pour moi. J'essaye d'attraper plusieurs colonnes de plusieurs tables. Ma jointure gauche pour la table product p num provoque une erreur: Error Code: 1066. Not unique table/alias: 'product p num'Mysql Join multiple Erreur de table: Table non-unique/alias

J'ai vu cette erreur apparaître pour d'autres exemples de stackoverflow. J'ai essayé de modifier différentes versions, mais je ne sais pas exactement ce qui me manque.

SELECT tbls.SNum,tblmar.AssemPart, tblmar.wifi, `product p num`.`Customer Name` 

FROM floor.tbls, manu.tblmar, def.`product p num` 

LEFT JOIN tblmar ON tbls.PartNum = tblmar.AssemPart 
LEFT JOIN `product p num` on tblmar.AssemPart = `product p num`.`product p` 

WHERE tblmar.AssemPart IS NOT NULL 
AND `product p num`.`Customer Name` = 'Google' 
AND tblmar.wifi = 1 
ORDER BY `product p num`.`product p`; 
+1

Voici une suggestion: ne mélangez pas la syntaxe virgule old school pour les opérations de jointure avec la nouvelle syntaxe du mot clé JOIN. La clause FROM de cette requête contient des références à * cinq * tables. (Il y a deux références à 'tblmar' et deux références à' product p num'. Je pense que vous avez juste besoin de modifier cette ligne 'FROM', et de tout enlever après (et y compris) cette première virgule (je vous recommande également d'éviter d'utiliser Utilisez le caractère de soulignement au lieu d'un espace, par exemple 'product_p_num'.) – spencer7593

+0

J'ai modifié la ligne de comme Jacobm001 et cela a corrigé le problème.J'ai ajouté toutes les tables parce que j'étais avoir des problèmes jusqu'à ce que je ai eu l'erreur d'alias Donc, je ne me rendais pas compte de mon 'de 'causé.Ne pas réalisé que' joint' remplacer la déclaration de plusieurs tables @ spencer7593 – narue1992

+0

@ spencer7593 aussi .. le nommage de la table n'est pas le mien. a été fait de cette façon donc pas grand chose que je peux faire, mais je sais pas les nommer avec des espaces – narue1992

Répondre

1

Le problème est que vous rejoignez les mêmes tables plusieurs fois sans aliasing aucun d'entre eux. Vouliez-vous vous joindre à eux deux fois? Je ne vois pas pourquoi vous l'auriez fait intentionnellement ici.

La logique que vous voulez est probablement ceci:

SELECT 
    tbls.SNum 
    , tblmar.AssemPart 
    , tblmar.wifi 
    , `product p num`.`Customer Name` 
FROM 
    floor.tbls 
    LEFT JOIN tblmar 
    ON tbls.PartNum = tblmar.AssemPart 
    LEFT JOIN `product p num` 
    on tblmar.AssemPart = `product p num`.`product p` 
WHERE 
    tblmar.AssemPart IS NOT NULL 
    AND `product p num`.`Customer Name` = 'Google' 
    AND tblmar.wifi = 1 
ORDER BY 
    `product p num`.`product p`; 
+0

Ok, donc le problème est que le 'From' ne peut pas être toutes les tables lorsque j'utilise la jointure correcte? – narue1992

+0

@ narue1992 Le problème est-ce que vous utilisez d deux styles de jointure différents. Vous avez seulement besoin de rejoindre chaque table une fois. Chaque nom ne devrait apparaître dans la clause 'from' qu'une seule fois, à moins qu'il ne soit aliasé (ce dont vous n'avez pas besoin ici). La clause 'from' est tout ce qui existe entre' from' et 'where' btw. – Jacobm001

0

Vous effectuez une requête qui référence deux fois la même table.

Si vous voulez faire cela, vous devez alias ces tables. Exemple:

SELECT * 
FROM table AS alias1 
LEFT JOIN table AS alias2 
1

Vous confondez 2 façons différentes de la syntaxe sur la façon de rejoindre les tables. Vous avez dans votre clause from toutes les tables et vous les rejoignez à nouveau.