2011-07-31 17 views
1
SELECT `users`.* 
FROM (`users`) 
JOIN `users_profiles` ON `users_profiles`.`user_id` = `users`.`id` 
JOIN `albums` ON `albums`.`user_id` = `users`.`id` 
JOIN `users_sites` ON `users_sites`.`user_id` = `users`.`id` 
WHERE `users`.`id` = 4 

これは私のクエリです。私はusersusers_profilesalbums、およびusers_sitesのデータを持っています。現在、4つの別々のクエリで必要なデータを取得していますが、JOINで最適化します。My MySQL JOINクエリは1つのテーブルからのみデータを取得します

私の問題は、返される結果セットには、テーブル(ここではidが4)からの1行のデータしか含まれていないということです。これは期待されていますが、他のテーブルも末尾にJOINと書いて欲しいです。例えば

users_profilesは、私は4にuser_idセットが含まれています。しかしusers_profilesからの行は、これまで私が見るすべてはusersから来るもので、クエリに追加されていない確認している行が含まれています。

アイデア?他のテーブルの場合も同じです。に正しく選択する必要があることを確認しましたが、何が間違っているのか分かりません。

ありがとうございました!

+0

あなたは何のアルバムは彼らのために存在しない場合でも、ユーザーのための行をしたいですか? users_sitesがない場合はどうなりますか? 1人のユーザーに複数のアルバムと複数のユーザー_サイトがありますか? – jswolf19

+0

リマインダーをありがとう - アルバムのないユーザーの(作業中の)バージョンをテストしただけで、0行が返されます。私はそれを保持するために私のクエリの第4行をLEFT JOINに変更しました。 – Jack

+0

複数のアルバムと複数のusers_sitesの両方を許可すると、おそらくこのクエリで必要なものを得ることができないからです。 – jswolf19

答えて

2

試してみてください。

SELECT `users`.*, `users_profiles`.*, `albums`.*, `users_sites`.* 
FROM (`users`) 
JOIN `users_profiles` ON `users_profiles`.`user_id` = `users`.`id` 
JOIN `albums` ON `albums`.`user_id` = `users`.`id` 
JOIN `users_sites` ON `users_sites`.`user_id` = `users`.`id` 
WHERE `users`.`id` = 4 

ユーザーのみテーブルから列を選択するあなたのコード。

また、

SELECT * 
FROM (`users`) 
JOIN `users_profiles` ON `users_profiles`.`user_id` = `users`.`id` 
JOIN `albums` ON `albums`.`user_id` = `users`.`id` 
JOIN `users_sites` ON `users_sites`.`user_id` = `users`.`id` 
WHERE `users`.`id` = 4 

それが最適化されていないとして、*を選択することは推奨されないことに注意してください。必要な列を選択するだけです。

+0

ありがとうございます、あなたの最初のクエリは素晴らしい作品です。列の選択を最適化する方法を検討します。 – Jack

1

ユーザーテーブルからのみ列を選択します。

SELECT users *

すべてのテーブル(クエリによって影響を受ける)から すべての列が含まれるように、あなたが取得したい列を含めるようにSELECTステートメントを変更し

SELECT * FROM `users` 
JOIN `users_profiles` ON `users_profiles`.`user_id` = `users`.`id` 
JOIN `albums` ON `albums`.`user_id` = `users`.`id` 
JOIN `users_sites` ON `users_sites`.`user_id` = `users`.`id` 
WHERE `users`.`id` = 4 

users_profileとユーザーテーブルからすべてを含めるには、

SELECT `users`.*, `users_profiles`.* FROM `users` 
JOIN `users_profiles` ON `users_profiles`.`user_id` = `users`.`id` 
JOIN `albums` ON `albums`.`user_id` = `users`.`id` 
JOIN `users_sites` ON `users_sites`.`user_id` = `users`.`id` 
WHERE `users`.`id` = 4 
2
SELECT `users`.*, `user_profiles`.*, `albums`.*, `user_sites`.* 
FROM (`users`) 
JOIN `users_profiles` ON `users_profiles`.`user_id` = `users`.`id` 
JOIN `albums` ON `albums`.`user_id` = `users`.`id` 
JOIN `users_sites` ON `users_sites`.`user_id` = `users`.`id` 
WHERE `users`.`id` = 4 
関連する問題