2017-05-24 15 views
1

私は3つのテーブル、ユーザー、車と家賃があります。 レンタルテーブルには、同様の取引情報が含まれています。私はいくつかのユーザーテーブルの列、いくつかの車の列は、レンタルテーブルと結合出力を表示したい。MySQL - ユニークなテーブル/エイリアス

PHPMyAdminを使用してクエリを抽出しましたが、「一意ではないテーブル/エイリアス」エラーが発生しました。

マイクエリ:

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` 

おかげ

+2

「JOIN rent」テーブルへのクエリが2回必要ですか?私は彼らのうちの1人が「車」でなければならないと思う?とにかく同じテーブルを2度結合したい場合は、別名 'LEFT JOIN table1 AS t1'を使用し、そのフィールドのいずれかに' t1.field1'を使用します。 –

+1

また、 'JOIN'は間違って使用されています - ' FROM rent、cars、LEFT JOIN ... '。これは役に立たない。これを見てください:[MySQL LEFT JOINの例](https://stackoverflow.com/q/22769989/2298301) –

答えて

0

決して使用カンマでをFROM句。

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; 

お知らせテーブルの別名の使用:常には、適切な、明示的なJOIN構文を使用します。彼らは、クエリをより簡単に書いて読めるようにします。

LEFT JOINをなぜ使用しているのかわからないので、それらを内部結合に変更しました。

+0

あなたのガイドをありがとう!私はかなりの時間のためにそれに取り組んできた..本当にありがとう! – Pidaus

0

、ユニークでないテーブルの別名はもっとそして1台が同じエイリアスを有することを意味します。

あなたのクエリ:

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 

は、この問題を回避するために

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 

をお読みください。残りについては

:クエリは、もう少し手の込んだそれになりそうすべきである: あなたはこのようにそれを実行し、同じ結果を得ることができますように見えます:

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 
関連する問題