質問編集履歴

12

a

2020/02/16 07:56

投稿

yuki0123
yuki0123

スコア6

test CHANGED
File without changes
test CHANGED
@@ -1,129 +1 @@
1
1
  ### 2つのSQLの結果を結合して、viewで表示したいです。
2
-
3
-
4
-
5
- ・companies(id, master_member_id, name, address)
6
-
7
- ・members(id, company_id, name, email)
8
-
9
- ・member_details(member_id, version)
10
-
11
- ![イメージ説明](a033d5b6d90c5a3b3804332616e30503.png)
12
-
13
-
14
-
15
- 現在上記のような,3つのテーブルがあり,companiesとmembers(①とします)、membersとmember_details(②とします)をそれぞれアウタージョインして2つのSQLを発行しています。
16
-
17
-
18
-
19
- この二つのsqlの結果を結合してveiwでcompaniesに紐ずいているmember_detailsテーブルのversionカラムのデータを表示し、さらにcompanyごとに何人versionに値が入っているのかcountで数を表示したいです。(テーブルはcompaniesとmembersが多対一、membersとmember_detailsが一対一です。)
20
-
21
-
22
-
23
- 3つのテーブルをjoinなどして連結させるとversionに対してcount関数が使えないので、あえてjoinは使わずに実装しようとしています。
24
-
25
-
26
-
27
- ①で引っ張ってきたcompanyデータをmap関数でループさせて、そのデータの一個一個に②のデータをconcatで結合させようとしているのですが、どのように結合させればよいか検討がつきません。
28
-
29
-
30
-
31
- ```
32
-
33
- @companies = Company.all.joins('LEFT OUTER JOIN members ON companies.master_member_id = members.id')
34
-
35
- .select('companies.*, members.id as member_id, members.company_id as com_id').to_a
36
-
37
-
38
-
39
- @members = Member.all.joins('LEFT OUTER JOIN member_details ON members.id = member_details.member_id')
40
-
41
- .select('members.id as member_id, members.company_id as member_com_id, member_details.member_id as member_detail_id, member_details.version as ver').to_a
42
-
43
- ```
44
-
45
-
46
-
47
- ```想定している結果
48
-
49
-
50
-
51
- 各companyに対して紐ずいているmemberのversionカラムに値が入っている個数を表示すること。
52
-
53
- 下の例だと2(comany.id = 1のmemberでversionに値があるのは1,3の二人なので)
54
-
55
-
56
-
57
- テーブル定義
58
-
59
-
60
-
61
- CREATE TABLE companies(
62
-
63
- id INT(11) AUTO_INCREMENT NOT NULL,
64
-
65
- master_member_id INT(11),
66
-
67
- name VARCHAR(30) NOT NULL ,
68
-
69
- address VARCHAR(30) NOT NULL,
70
-
71
- PRIMARY KEY (id));
72
-
73
-
74
-
75
- CREATE TABLE members(
76
-
77
- id INT(11) AUTO_INCREMENT NOT NULL,
78
-
79
- company_id INT(11) NOT NULL ,
80
-
81
- name VARCHAR(30) NOT NULL,
82
-
83
- email VARCHAR(30) NOT NULL
84
-
85
- PRIMARY KEY (id));
86
-
87
-
88
-
89
- CREATE TABLE member_details(
90
-
91
- member_id INT(11) AUTO_INCREMENT NOT NULL,
92
-
93
- version INT(11) NOT NULL ,
94
-
95
- PRIMARY KEY (id));
96
-
97
-
98
-
99
- テーブルに存在するデータ
100
-
101
- insert into companies (id, master_member_id, name, address) values (1, 1,'google', tokyo);
102
-
103
-
104
-
105
- insert into members (id, company_id, name, email) values (1, 1, 'yuki', test@test.com);
106
-
107
- insert into members (id, company_id, name, email) values (2, 1, 'aki', test2@test.com);
108
-
109
- insert into members (id, company_id, name, email) values (3, 1, 'koko', test3@test.com);
110
-
111
-
112
-
113
- insert into member_details (member_id, version) values (1, 3.5);
114
-
115
- insert into member_details (member_id, version) values (2, nil);
116
-
117
- insert into member_details (member_id, version) values (3, 3.5);
118
-
119
- ```
120
-
121
- データベース:mysql
122
-
123
- バージョン: 5.7.27
124
-
125
-
126
-
127
-
128
-
129
- 何かアドバイスをいただければ幸いです。

11

f

2020/02/16 07:56

投稿

yuki0123
yuki0123

スコア6

test CHANGED
File without changes
test CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  ・member_details(member_id, version)
10
10
 
11
- ![イメージ説明](67cb9e197004171c89bf6d1696dac2c4.png)
11
+ ![イメージ説明](a033d5b6d90c5a3b3804332616e30503.png)
12
12
 
13
13
 
14
14
 

10

s

2020/02/13 12:45

投稿

yuki0123
yuki0123

スコア6

test CHANGED
File without changes
test CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  ・member_details(member_id, version)
10
10
 
11
- ![イメージ説明](92e6b729b2bc50a9291355c177908b39.png)
11
+ ![イメージ説明](67cb9e197004171c89bf6d1696dac2c4.png)
12
12
 
13
13
 
14
14
 

9

a

2020/02/13 12:44

投稿

yuki0123
yuki0123

スコア6

test CHANGED
File without changes
test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- ・companies(id, name, address)
5
+ ・companies(id, master_member_id, name, address)
6
6
 
7
7
  ・members(id, company_id, name, email)
8
8
 
@@ -28,6 +28,22 @@
28
28
 
29
29
 
30
30
 
31
+ ```
32
+
33
+ @companies = Company.all.joins('LEFT OUTER JOIN members ON companies.master_member_id = members.id')
34
+
35
+ .select('companies.*, members.id as member_id, members.company_id as com_id').to_a
36
+
37
+
38
+
39
+ @members = Member.all.joins('LEFT OUTER JOIN member_details ON members.id = member_details.member_id')
40
+
41
+ .select('members.id as member_id, members.company_id as member_com_id, member_details.member_id as member_detail_id, member_details.version as ver').to_a
42
+
43
+ ```
44
+
45
+
46
+
31
47
  ```想定している結果
32
48
 
33
49
 
@@ -45,6 +61,8 @@
45
61
  CREATE TABLE companies(
46
62
 
47
63
  id INT(11) AUTO_INCREMENT NOT NULL,
64
+
65
+ master_member_id INT(11),
48
66
 
49
67
  name VARCHAR(30) NOT NULL ,
50
68
 
@@ -80,7 +98,7 @@
80
98
 
81
99
  テーブルに存在するデータ
82
100
 
83
- insert into companies (id, name, address) values (1, 'google', tokyo);
101
+ insert into companies (id, master_member_id, name, address) values (1, 1,'google', tokyo);
84
102
 
85
103
 
86
104
 

8

s

2020/02/13 12:41

投稿

yuki0123
yuki0123

スコア6

test CHANGED
File without changes
test CHANGED
@@ -28,7 +28,7 @@
28
28
 
29
29
 
30
30
 
31
- 想定している結果
31
+ ```想定している結果
32
32
 
33
33
 
34
34
 
@@ -98,7 +98,7 @@
98
98
 
99
99
  insert into member_details (member_id, version) values (3, 3.5);
100
100
 
101
-
101
+ ```
102
102
 
103
103
  データベース:mysql
104
104
 

7

u

2020/02/13 12:20

投稿

yuki0123
yuki0123

スコア6

test CHANGED
File without changes
test CHANGED
@@ -28,6 +28,82 @@
28
28
 
29
29
 
30
30
 
31
+ 想定している結果
32
+
33
+
34
+
35
+ 各companyに対して紐ずいているmemberのversionカラムに値が入っている個数を表示すること。
36
+
37
+ 下の例だと2(comany.id = 1のmemberでversionに値があるのは1,3の二人なので)
38
+
39
+
40
+
41
+ テーブル定義
42
+
43
+
44
+
45
+ CREATE TABLE companies(
46
+
47
+ id INT(11) AUTO_INCREMENT NOT NULL,
48
+
49
+ name VARCHAR(30) NOT NULL ,
50
+
51
+ address VARCHAR(30) NOT NULL,
52
+
53
+ PRIMARY KEY (id));
54
+
55
+
56
+
57
+ CREATE TABLE members(
58
+
59
+ id INT(11) AUTO_INCREMENT NOT NULL,
60
+
61
+ company_id INT(11) NOT NULL ,
62
+
63
+ name VARCHAR(30) NOT NULL,
64
+
65
+ email VARCHAR(30) NOT NULL
66
+
67
+ PRIMARY KEY (id));
68
+
69
+
70
+
71
+ CREATE TABLE member_details(
72
+
73
+ member_id INT(11) AUTO_INCREMENT NOT NULL,
74
+
75
+ version INT(11) NOT NULL ,
76
+
77
+ PRIMARY KEY (id));
78
+
79
+
80
+
81
+ テーブルに存在するデータ
82
+
83
+ insert into companies (id, name, address) values (1, 'google', tokyo);
84
+
85
+
86
+
87
+ insert into members (id, company_id, name, email) values (1, 1, 'yuki', test@test.com);
88
+
89
+ insert into members (id, company_id, name, email) values (2, 1, 'aki', test2@test.com);
90
+
91
+ insert into members (id, company_id, name, email) values (3, 1, 'koko', test3@test.com);
92
+
93
+
94
+
95
+ insert into member_details (member_id, version) values (1, 3.5);
96
+
97
+ insert into member_details (member_id, version) values (2, nil);
98
+
99
+ insert into member_details (member_id, version) values (3, 3.5);
100
+
101
+
102
+
103
+ データベース:mysql
104
+
105
+ バージョン: 5.7.27
106
+
31
107
 
32
108
 
33
109
 

6

2020/02/13 12:20

投稿

yuki0123
yuki0123

スコア6

test CHANGED
File without changes
test CHANGED
@@ -24,7 +24,11 @@
24
24
 
25
25
 
26
26
 
27
- ①で引っ張ってきたcompanyデータをmap関数でループさせて、そのデータの一個一個に②のデータを結合させようとしているのですが、どのように結合させればよいか検討がつきません。
27
+ ①で引っ張ってきたcompanyデータをmap関数でループさせて、そのデータの一個一個に②のデータをconcatで結合させようとしているのですが、どのように結合させればよいか検討がつきません。
28
+
29
+
30
+
31
+
28
32
 
29
33
 
30
34
 

5

gp

2020/02/13 11:58

投稿

yuki0123
yuki0123

スコア6

test CHANGED
File without changes
test CHANGED
@@ -16,7 +16,11 @@
16
16
 
17
17
 
18
18
 
19
- この二つのsqlの結果を結合してveiwでcompaniesに紐ずいているmember_detailsテーブルのversionカラムのデータを表示したいです。(テーブルはcompaniesとmembersが多対一、membersとmember_detailsが一対一です。)
19
+ この二つのsqlの結果を結合してveiwでcompaniesに紐ずいているmember_detailsテーブルのversionカラムのデータを表示し、さらにcompanyごとに何人versionに値が入っているのかcountで数を表示したいです。(テーブルはcompaniesとmembersが多対一、membersとmember_detailsが一対一です。)
20
+
21
+
22
+
23
+ 3つのテーブルをjoinなどして連結させるとversionに対してcount関数が使えないので、あえてjoinは使わずに実装しようとしています。
20
24
 
21
25
 
22
26
 

4

j

2020/02/13 11:54

投稿

yuki0123
yuki0123

スコア6

test CHANGED
File without changes
test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- ・compnies(id, name, address)
5
+ ・companies(id, name, address)
6
6
 
7
7
  ・members(id, company_id, name, email)
8
8
 

3

語彙

2020/02/13 11:44

投稿

yuki0123
yuki0123

スコア6

test CHANGED
File without changes
test CHANGED
@@ -4,9 +4,9 @@
4
4
 
5
5
  ・compnies(id, name, address)
6
6
 
7
- ・members(id, company_name, name, email)
7
+ ・members(id, company_id, name, email)
8
8
 
9
- ・member_details(member_name, version)
9
+ ・member_details(member_id, version)
10
10
 
11
11
  ![イメージ説明](92e6b729b2bc50a9291355c177908b39.png)
12
12
 

2

2020/02/13 11:43

投稿

yuki0123
yuki0123

スコア6

test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,4 @@
1
- ![イメージ説明](92e6b729b2bc50a9291355c177908b39.png)### 2つのSQLの結果を結合して、viewで表示したいです。
1
+ ### 2つのSQLの結果を結合して、viewで表示したいです。
2
2
 
3
3
 
4
4
 
@@ -7,6 +7,8 @@
7
7
  ・members(id, company_name, name, email)
8
8
 
9
9
  ・member_details(member_name, version)
10
+
11
+ ![イメージ説明](92e6b729b2bc50a9291355c177908b39.png)
10
12
 
11
13
 
12
14
 

1

画像挿入

2020/02/13 11:06

投稿

yuki0123
yuki0123

スコア6

test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,4 @@
1
- ### 2つのSQLの結果を結合して、viewで表示したいです。
1
+ ![イメージ説明](92e6b729b2bc50a9291355c177908b39.png)### 2つのSQLの結果を結合して、viewで表示したいです。
2
2
 
3
3
 
4
4