回答編集履歴
2
回答の取り下げ
test
CHANGED
@@ -1,57 +1,53 @@
|
|
1
|
-
|
1
|
+
**回答を取り下げます。**
|
2
2
|
|
3
|
-
|
3
|
+
コメントと一部重複しますけど、理由は以下のとおりです。
|
4
|
-
|
5
|
-
> 1,AAA,1
|
6
|
-
|
7
|
-
> 2,BBB,0
|
8
|
-
|
9
|
-
> 3,CCC,0
|
10
4
|
|
11
5
|
|
12
6
|
|
13
|
-
|
7
|
+
ご提示いただいたサンプルデータにおいて
|
14
8
|
|
15
|
-
|
9
|
+
`NAME`は、`ID`に従属すると考えたが
|
10
|
+
|
11
|
+
実際は関数従属が成立していない
|
16
12
|
|
17
13
|
|
18
14
|
|
15
|
+
現状の`TABLE1`, `TABLE2`の構成で
|
19
16
|
|
17
|
+
「`ID`で結合してもいいのか」どうかを迷い、結果として
|
20
18
|
|
21
|
-
|
19
|
+
私は「しないほうがよい」と判断した
|
22
20
|
|
23
|
-
|
21
|
+
↑↑↑
|
24
22
|
|
25
|
-
|
23
|
+
`独断と偏見なので回避するべき思考でした`
|
26
|
-
|
27
|
-
, T2.ID As T2_ID
|
28
|
-
|
29
|
-
, T2.NAME As T2_NAME
|
30
|
-
|
31
|
-
, T2.FLG
|
32
|
-
|
33
|
-
FROM WORK.TABLE1 T1
|
34
|
-
|
35
|
-
LEFT JOIN WORK.TABLE2 T2
|
36
|
-
|
37
|
-
ON T1.NAME = T2.NAME
|
38
|
-
|
39
|
-
;
|
40
|
-
|
41
|
-
```
|
42
24
|
|
43
25
|
|
44
26
|
|
27
|
+
今思い返すと、`SQL`を掲載するより先に
|
28
|
+
|
45
|
-
|
29
|
+
テーブル間の矛盾を解消したり
|
30
|
+
|
31
|
+
より厳密に個人を特定する手段は講じられないか
|
32
|
+
|
33
|
+
といったようなアプローチが良かったのではないかと感じます
|
46
34
|
|
47
35
|
|
48
36
|
|
49
|
-
|
37
|
+
1. 両テーブルで、`ID`が同一、`NAME`が異なっている
|
50
38
|
|
51
|
-
|
39
|
+
という条件に合致したレコードを抽出して
|
52
40
|
|
53
|
-
|
41
|
+
どちらか一方の値に `NAME`を統一する
|
54
42
|
|
55
|
-
|
43
|
+
( 矛盾の解消 )
|
56
44
|
|
45
|
+
|
46
|
+
|
57
|
-
|
47
|
+
2. `SQL`文において、`NAME`だけでなく
|
48
|
+
|
49
|
+
生年月日や住所、電話番号などといった列とも結合させ
|
50
|
+
|
51
|
+
より厳密に個人を特定する
|
52
|
+
|
53
|
+
( `SQL`のロジック改善 )
|
1
test
CHANGED
@@ -10,7 +10,11 @@
|
|
10
10
|
|
11
11
|
|
12
12
|
|
13
|
+
IDでは紐づかないため、結合条件に含めても意味が無いと思います。
|
14
|
+
|
13
|
-
以下のような`SQL`でいかがでしょう。
|
15
|
+
シンプルに以下のような`SQL`でいかがでしょうか。
|
16
|
+
|
17
|
+
|
14
18
|
|
15
19
|
|
16
20
|
|
@@ -30,9 +34,7 @@
|
|
30
34
|
|
31
35
|
LEFT JOIN WORK.TABLE2 T2
|
32
36
|
|
33
|
-
|
37
|
+
ON T1.NAME = T2.NAME
|
34
|
-
|
35
|
-
OR ( NOT( T1.ID = T2.ID ) AND T1.NAME = T2.NAME )
|
36
38
|
|
37
39
|
;
|
38
40
|
|