回答編集履歴

1

sample

2018/07/19 13:07

投稿

yambejp
yambejp

スコア114823

test CHANGED
@@ -7,3 +7,81 @@
7
7
 
8
8
 
9
9
  またestateが複数stattion情報をもつなら正規化する必要があります
10
+
11
+
12
+
13
+ # sample
14
+
15
+ 冗長に処理すればこんな感じ
16
+
17
+ - 元データ
18
+
19
+ ```SQL
20
+
21
+ create table route(ro_id varchar(100) primary key,ro_name varchar(30));
22
+
23
+ insert into route values("kdfnakdnfakndfajfajdb","山手線");
24
+
25
+
26
+
27
+ create table station(st_id varchar(100) primary key,ro_id varchar(100),st_name varchar(30));
28
+
29
+ insert into station values("nfwiha4hqwkefnjg","kdfnakdnfakndfajfajdb","渋谷駅");
30
+
31
+
32
+
33
+ create table region(re_id varchar(100) primary key,re_name varchar(30));
34
+
35
+ insert into region values("faknfakndfa","港区");
36
+
37
+
38
+
39
+ create table estate(es_id varchar(100) primary key,es_name varchar(30),re_id varchar(100));
40
+
41
+ insert into estate values("fnaqi3flanv","estate","faknfakndfa");
42
+
43
+
44
+
45
+ create table access(ac_id int primary key auto_increment,es_id varchar(100),ro_id varchar(100),st_id varchar(100),during int);
46
+
47
+ insert into access(es_id,ro_id,st_id,during) values("fnaqi3flanv","aknfdfadn","fadkfakdnfadfn",3),
48
+
49
+ ("fnaqi3flanv","kdfnakdnfakndfajfajdb","nfwiha4hqwkefnjg",19);
50
+
51
+
52
+
53
+ create table room(rm_id varchar(100) primary key,es_id varchar(100),floor int,rent int,is_taken tinyint);
54
+
55
+ insert into room values("asdfghjklsdfghjkl","fnaqi3flanv",3,120000,0)
56
+
57
+
58
+
59
+
60
+
61
+ ```
62
+
63
+
64
+
65
+ - 検索
66
+
67
+ ```SQL
68
+
69
+ select es.* from estate as es
70
+
71
+ inner join room as rm on es.es_id=rm.es_id and rm.rent>=100000
72
+
73
+ and rm.es_id in (
74
+
75
+ select es_id from access as ac where ac.st_id in(
76
+
77
+ select st_id from station as st
78
+
79
+ inner join route as ro on st.ro_id=ro.ro_id and ro.ro_name='山手線'
80
+
81
+ and st.st_name in('渋谷駅','恵比寿駅')
82
+
83
+ )
84
+
85
+ )
86
+
87
+ ```