質問: 下記は user_dataテーブルとuser_prテーブルを結合して user_dataテーブルと同じidの人のuser_prテーブルの情報の user_dataテーブルのidとuser_prテーブルのuser_idを取り出しているSQL文だと思います。 ``` SELECT user_data.id,user_pr.user_id FROM user_data,user_pr WHERE user_data.id=user_pr.user_id; ``` 上記で一覧が取得できていますが、更にもうひとつuser_skillというテーブルを参照(計3テーブル)することになり ``` SELECT user_data.id,user_pr.user_id,user_skill.user_id FROM user_data,user_pr,user_skill WHERE user_data.id=user_pr.user_id=user_skill.user_id; ``` という風にしているのですが、読み込めずです... どうしたら良いのでしょうか? とりあえず動作確認したいので、コマンドプロントで確認しています。 テーブル構造は下記の通りです。 user_data | CREATE TABLE `user_data` ( `id` int(11) NOT NULL AUTO_INCREMENT, `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `email` varchar(50) NOT NULL, `password` varchar(255) NOT NULL, `name1` varchar(255) DEFAULT NULL, `name2` varchar(255) DEFAULT NULL, `name3` varchar(255) DEFAULT NULL, `name4` varchar(255) DEFAULT NULL, `name5` varchar(255) DEFAULT NULL, `name6` varchar(255) DEFAULT NULL, `middle_name` varchar(255) DEFAULT NULL, `birth_year` varchar(255) NOT NULL, `birth_month` varchar(255) NOT NULL, `birth_day` varchar(255) NOT NULL, `gender` char(2) NOT NULL, `first_post` varchar(255) NOT NULL, `last_post` varchar(255) NOT NULL, `pref` varchar(255) NOT NULL, `city` varchar(255) NOT NULL, `town` varchar(255) NOT NULL, `building` varchar(255) DEFAULT NULL, `tel1` varchar(255) NOT NULL, `tel2` varchar(255) NOT NULL, `tel3` varchar(255) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `email` (`email`) ) ENGINE=InnoDB AUTO_INCREMENT=63 DEFAULT CHARSET=utf8 | user_pr | CREATE TABLE `user_pr` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL, `major_category` varchar(255) NOT NULL, `major_skill` varchar(255) NOT NULL, `cont_date` varchar(255) NOT NULL, `introduction` text NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=utf8 | user_skill | CREATE TABLE `user_skill` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL, `skill` varchar(255) DEFAULT NULL, `year` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=103 DEFAULT CHARSET=utf8 | 読み込めないというより、取得できていないのです... ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/5b2e44d7bdd3a1ce4da7f620bcb9ac77.png)
回答: user_data と user_pr は 1 : n user_data と user_skill は 1 : n であることを前提で。 ``` SELECT UD.* , UP.* , US.* FROM user_data UD LEFT JOIN user_pr UP ON UD.id = UP.user_id LEFT JOIN user_skill US ON UD.id = US.user_id ``` 取得できないというよりは・・・ ``` SELECT user_data.id , user_pr.user_id as pr_user_id -- 別名つけないと上書きされる , user_skill.user_id as skill_user_id -- 別名つけないと上書きされる FROM user_data,user_pr,user_skill WHERE user_data.id = user_pr.user_id AND user_data.id = user_skill.user_id; ``` 補足 何でもかんでも varchar は楽といえば楽ですが...オススメしません。パフォーマンス悪くなりますよ。