2017-05-24 5 views
1

J'ai trois tables, les utilisateurs, la voiture et le loyer. La table des loyers contient des informations sur les transactions. Je veux afficher la sortie où certaines colonnes de la table des utilisateurs, une colonne de voiture se joint à la table des loyers.MySQL - Not Unique Table/Alias ​​

J'utilise PHPMyAdmin pour extraire les requêtes mais j'ai l'erreur "Not Unique Table/Alias".

Mes requêtes:

SELECT `rent`.*, `cars`.`car_id`, `cars`.`car_name`, `users`.`user_id`, 
    `users`.`name`, `users`.`state`, `users`.`address`, `users`.`zip`, 
    `users`.`phone`, `users`.`email` 
FROM `rent` , `cars` , `users` 
LEFT JOIN `rent` ON `users`.`user_id` = `rent`.`user_id` 
LEFT JOIN `rent` ON `cars`.`car_id` = `rent`.`car_id` 
AND `rent`.`user_id` = `users`.`user_id` AND `rent`.`car_id` = `cars`.`car_id` 

Merci

+2

Est-il nécessaire de demander deux fois à la table JOIN 'rent rent'? Je soupçonne que l'un d'eux pourrait être «voitures»? Si vous voulez quand même que la même table soit jointe deux fois, vous devez utiliser un alias: 'LEFT JOIN table1 AS t1' et ensuite pour l'un de ses champs:' t1.field1'. –

+1

De plus, 'JOIN 'a été incorrectement utilisé -' FROM location, cars, users LEFT JOIN ... '. Cela n'aide pas. S'il vous plaît jeter un oeil à ceci: [MySQL LEFT JOIN exemple] (https://stackoverflow.com/q/22769989/2298301) –

Répondre

0

Jamais virgules d'utilisation dans la clause FROM. toujours utilisation, explicite JOIN syntaxe:

SELECT r.*, c.car_id, c.car_name, u.user_id, u.name, u.state, u.address, u.zip, u.phone, u.email 
FROM users u JOIN 
    rent r 
    ON u.user_id = r.user_id JOIN 
    cars c 
    ON c.car_id = r.car_id; 

Notez l'utilisation des alias de table. Ils facilitent l'écriture et la lecture de la requête.

Je n'ai également aucune idée pourquoi vous utilisez LEFT JOIN, donc je les ai changés en jointures internes.

+0

Merci pour votre guide! Je travaille dessus depuis un moment ... vraiment merci! – Pidaus

0

L'alias de table ne unique signifie que plus de 1 table a le même alias.

Votre requête:

SELECT rent.*, cars.car_id, cars.car_name, users.user_id, users.name, users.state, users.address, users.zip, users.phone, users.email 
FROM rent , cars , users 
LEFT JOIN rent ON users.user_id = rent.user_id 
LEFT JOIN rent ON cars.car_id = rent.car_id AND rent.user_id = users.user_id AND rent.car_id = cars.car_id 

devriez lire

SELECT rent.*, cars.car_id, cars.car_name, users.user_id, users.name, users.state, users.address, users.zip, users.phone, users.email 
FROM rent , cars , users 
LEFT JOIN rent AS rent_1 ON users.user_id = rent_1.user_id 
LEFT JOIN rent AS rent_2 ON cars.car_id = rent_2.car_id AND rent_2.user_id = users.user_id AND rent_2.car_id = cars.car_id 

pour éviter ce problème.

Pour le reste: La requête semble être un peu plus compliqué alors il devrait: Il semble que vous pouvez l'exécuter comme celui-ci et obtenir le même résultat:

SELECT rent.*, cars.car_id, cars.car_name, users.user_id, users.name, users.state, users.address, users.zip, users.phone, users.email 
FROM rent 
LEFT JOIN users ON users.user_id = rent.user_id 
LEFT JOIN cars ON cars.car_id = rent.car_id AND rent.user_id = users.user_id AND rent.car_id = cars.car_id