estateがroute情報とstation情報を持っていますが
stationがroute情報をもっているのでestateのrouteはいらないのでは?
もちろん山手線の渋谷と東横線の渋谷を別管理したいということなら必要ですが
またestateが複数stattion情報をもつなら正規化する必要があります
sample
冗長に処理すればこんな感じ
SQL
1 create table route ( ro_id varchar ( 100 ) primary key , ro_name varchar ( 30 ) ) ;
2 insert into route values ( "kdfnakdnfakndfajfajdb" , "山手線" ) ;
3
4 create table station ( st_id varchar ( 100 ) primary key , ro_id varchar ( 100 ) , st_name varchar ( 30 ) ) ;
5 insert into station values ( "nfwiha4hqwkefnjg" , "kdfnakdnfakndfajfajdb" , "渋谷駅" ) ;
6
7 create table region ( re_id varchar ( 100 ) primary key , re_name varchar ( 30 ) ) ;
8 insert into region values ( "faknfakndfa" , "港区" ) ;
9
10 create table estate ( es_id varchar ( 100 ) primary key , es_name varchar ( 30 ) , re_id varchar ( 100 ) ) ;
11 insert into estate values ( "fnaqi3flanv" , "estate" , "faknfakndfa" ) ;
12
13 create table access ( ac_id int primary key auto_increment , es_id varchar ( 100 ) , ro_id varchar ( 100 ) , st_id varchar ( 100 ) , during int ) ;
14 insert into access ( es_id , ro_id , st_id , during ) values ( "fnaqi3flanv" , "aknfdfadn" , "fadkfakdnfadfn" , 3 ) ,
15 ( "fnaqi3flanv" , "kdfnakdnfakndfajfajdb" , "nfwiha4hqwkefnjg" , 19 ) ;
16
17 create table room ( rm_id varchar ( 100 ) primary key , es_id varchar ( 100 ) , floor int , rent int , is_taken tinyint ) ;
18 insert into room values ( "asdfghjklsdfghjkl" , "fnaqi3flanv" , 3 , 120000 , 0 )
19
20
SQL
1 select es . * from estate as es
2 inner join room as rm on es . es_id = rm . es_id and rm . rent >= 100000
3 and rm . es_id in (
4 select es_id from access as ac where ac . st_id in (
5 select st_id from station as st
6 inner join route as ro on st . ro_id = ro . ro_id and ro . ro_name = '山手線'
7 and st . st_name in ( '渋谷駅' , '恵比寿駅' )
8 )
9 )
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/19 12:35
2018/07/20 05:17