質問するログイン新規登録

回答編集履歴

1

sample

2020/06/06 06:18

投稿

yambejp
yambejp

スコア118173

answer CHANGED
@@ -1,3 +1,48 @@
1
1
  あっているような気もしますが、full outer joinでなければ
2
2
  leftなら左、rightなら右を基準に合致させて、基準側は
3
- 余れば放置、joinする側は余れば削除する・・・感じです
3
+ 余れば放置、joinする側は余れば削除する・・・感じです
4
+
5
+ # sample
6
+ ※以下サンプル上げておきます。
7
+ 書式はmysqlなのでご自身の環境あわせて適宜調整ください
8
+ ```SQL
9
+ create table tbl_left(id int primary key,num int,val int);
10
+ insert into tbl_left values
11
+ (1,1,100),
12
+ (2,1,101),
13
+ (3,2,200),
14
+ (4,2,201),
15
+ (5,3,300);
16
+
17
+ create table tbl_right(id int primary key,num int,val int);
18
+ insert into tbl_right values
19
+ (11,1,110),
20
+ (12,1,111),
21
+ (13,1,112),
22
+ (14,3,310),
23
+ (15,4,410);
24
+ ```
25
+ 上記に対して以下実行すると
26
+ ```SQL
27
+ select * from tbl_left as l
28
+ left join tbl_right as r
29
+ on l.num=r.num
30
+ order by l.id asc,r.id asc
31
+ ```
32
+ leftテーブルのidは全て生き、rightテーブルのid=15は削除されています
33
+ 逆に、以下だと
34
+ ```SQL
35
+ select * from tbl_left as l
36
+ right join tbl_right as r
37
+ on l.num=r.num
38
+ order by l.id asc,r.id asc
39
+ ```
40
+ leftテーブルのid=3,4は削除され、rightテーブルのidはすべて生きます
41
+ ちなみにinner joinすれば
42
+ ```SQL
43
+ select * from tbl_left as l
44
+ inner join tbl_right as r
45
+ on l.num=r.num
46
+ order by l.id asc,r.id asc
47
+ ```
48
+ 行き場のないleftのid=13,14やrightのid=15が削除されます