回答編集履歴

1

sample

2020/06/06 06:18

投稿

yambejp
yambejp

スコア116728

test CHANGED
@@ -3,3 +3,93 @@
3
3
  leftなら左、rightなら右を基準に合致させて、基準側は
4
4
 
5
5
  余れば放置、joinする側は余れば削除する・・・感じです
6
+
7
+
8
+
9
+ # sample
10
+
11
+ ※以下サンプル上げておきます。
12
+
13
+ 書式はmysqlなのでご自身の環境あわせて適宜調整ください
14
+
15
+ ```SQL
16
+
17
+ create table tbl_left(id int primary key,num int,val int);
18
+
19
+ insert into tbl_left values
20
+
21
+ (1,1,100),
22
+
23
+ (2,1,101),
24
+
25
+ (3,2,200),
26
+
27
+ (4,2,201),
28
+
29
+ (5,3,300);
30
+
31
+
32
+
33
+ create table tbl_right(id int primary key,num int,val int);
34
+
35
+ insert into tbl_right values
36
+
37
+ (11,1,110),
38
+
39
+ (12,1,111),
40
+
41
+ (13,1,112),
42
+
43
+ (14,3,310),
44
+
45
+ (15,4,410);
46
+
47
+ ```
48
+
49
+ 上記に対して以下実行すると
50
+
51
+ ```SQL
52
+
53
+ select * from tbl_left as l
54
+
55
+ left join tbl_right as r
56
+
57
+ on l.num=r.num
58
+
59
+ order by l.id asc,r.id asc
60
+
61
+ ```
62
+
63
+ leftテーブルのidは全て生き、rightテーブルのid=15は削除されています
64
+
65
+ 逆に、以下だと
66
+
67
+ ```SQL
68
+
69
+ select * from tbl_left as l
70
+
71
+ right join tbl_right as r
72
+
73
+ on l.num=r.num
74
+
75
+ order by l.id asc,r.id asc
76
+
77
+ ```
78
+
79
+ leftテーブルのid=3,4は削除され、rightテーブルのidはすべて生きます
80
+
81
+ ちなみにinner joinすれば
82
+
83
+ ```SQL
84
+
85
+ select * from tbl_left as l
86
+
87
+ inner join tbl_right as r
88
+
89
+ on l.num=r.num
90
+
91
+ order by l.id asc,r.id asc
92
+
93
+ ```
94
+
95
+ 行き場のないleftのid=13,14やrightのid=15が削除されます