リレーショナルデータベース実験! http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/mysql_09.htm http://dev.mysql.com/doc/refman/4.1/ja/join.html http://wota.jp/ac/?date=20051107 ↑こちらを参考にした。 http://wota.jp/ac/?date=20060514 ↑Railsと絡めるならここも役に立ちます。 ●●●●準備●●●● create database r_test; use r_test create table units ( id int(8), unit_name char(8), primary key (id) ) type=InnoDB; create table company ( id int(8), name char(8), age int8, unit_id int8, primary key (id) )type=InnoDB ; create table reports ( id int(8), company_id int(8), content char(8), primary key (id) ) type=InnoDB ; insert into company values (1,'abc', 21, 1); insert into company values (2,'def', 30, 2); insert into company values (3,'ghi', 40, 1); insert into reports values (1,1, 'test'); insert into reports values (2,2, 'test2'); insert into reports values (3,3, 'test3'); insert into units values (1,'aries'); insert into units values (2,'gemini'); insert into units values (3,'capu'); ●●●●確認●●●● mysql> show tables; +------------------+ | Tables_in_r_test | +------------------+ | company | | reports | | units | +------------------+ 3 rows in set (0.00 sec) mysql> select * from units; +----+-----------+ | id | unit_name | +----+-----------+ | 1 | aries | | 2 | gemini | | 3 | capu | +----+-----------+ 3 rows in set (0.00 sec) mysql> select * from company; +----+------+------+---------+ | id | name | age | unit_id | +----+------+------+---------+ | 1 | abc | 21 | 1 | | 2 | def | 30 | 2 | | 3 | ghi | 40 | 1 | +----+------+------+---------+ 3 rows in set (0.00 sec) mysql> select * from reports; +----+------------+---------+ | id | company_id | content | +----+------------+---------+ | 1 | 1 | test | | 2 | 2 | test2 | | 3 | 3 | test3 | +----+------------+---------+ 3 rows in set (0.00 sec) ●●●●実験●●●● mysql> select * from company inner join units where company.unit_id=units.id and units.id=1; +----+------+------+---------+----+-----------+ | id | name | age | unit_id | id | unit_name | +----+------+------+---------+----+-----------+ | 1 | abc | 21 | 1 | 1 | aries | | 3 | ghi | 40 | 1 | 1 | aries | +----+------+------+---------+----+-----------+ mysql> select * from reports left join company on reports.company_id=company.id; +----+------------+---------+------+------+------+---------+ | id | company_id | content | id | name | age | unit_id | +----+------------+---------+------+------+------+---------+ | 1 | 1 | test | 1 | abc | 21 | 1 | | 2 | 2 | test2 | 2 | def | 30 | 2 | | 3 | 3 | test3 | 3 | ghi | 40 | 1 | +----+------------+---------+------+------+------+---------+ おおおぉ。分かってきた・・・。 mysql> select * from ( reports left join company on reports.company_id=company.id ) left join units on company.unit_id = units.id ; +----+------------+---------+------+------+------+---------+------+-----------+ | id | company_id | content | id | name | age | unit_id | id | unit_name | +----+------------+---------+------+------+------+---------+------+-----------+ | 1 | 1 | test | 1 | abc | 21 | 1 | 1 | aries | | 2 | 2 | test2 | 2 | def | 30 | 2 | 2 | gemini | | 3 | 3 | test3 | 3 | ghi | 40 | 1 | 1 | aries | +----+------------+---------+------+------+------+---------+------+-----------+ おおおおぉ!完璧! なんだ。できた。 さらに、where文も追加! mysql> select * from ( reports left join company on reports.company_id=company.id ) left join units on company.unit_id = units.id where units.id = 1; +----+------------+---------+------+------+------+---------+------+-----------+ | id | company_id | content | id | name | age | unit_id | id | unit_name | +----+------------+---------+------+------+------+---------+------+-----------+ | 1 | 1 | test | 1 | abc | 21 | 1 | 1 | aries | | 3 | 3 | test3 | 3 | ghi | 40 | 1 | 1 | aries | +----+------------+---------+------+------+------+---------+------+-----------+ 完璧!