回答編集履歴

2

回答の取り下げ

2021/09/15 03:39

投稿

mayu-
mayu-

スコア335

test CHANGED
@@ -1,57 +1,53 @@
1
- > ▼期待る結果
1
+ **回答を取り下げま。**
2
2
 
3
- > ID,NAME,FLG
3
+ コメントと一部重複しますけど、理由は以下のとおりです。
4
-
5
- > 1,AAA,1
6
-
7
- > 2,BBB,0
8
-
9
- > 3,CCC,0
10
4
 
11
5
 
12
6
 
13
- IDでは紐づかないため、結合条件含めも意味が無いと思います。
7
+ ご提示いただいたサンプルデータおい
14
8
 
15
- シンプルに以下のような`SQL`でいかでしょうか。
9
+ `NAME`は、`ID`に従属すると考えた
10
+
11
+ 実際は関数従属が成立していない
16
12
 
17
13
 
18
14
 
15
+ 現状の`TABLE1`, `TABLE2`の構成で
19
16
 
17
+ 「`ID`で結合してもいいのか」どうかを迷い、結果として
20
18
 
21
- ```SQL
19
+ 私は「しないほうがよい」と判断した
22
20
 
23
- SELECT T1.ID As T1_ID
21
+        ↑↑↑
24
22
 
25
- , T1.NAME As T1_NAME
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
- | T1_ID | T1_NAME | T2_ID | T2_NAME | FLG |
37
+ 1. 両テーブルで、`ID`が同一、`NAME`が異なっている
50
38
 
51
- |-------|---------|-------|---------|-----|
39
+   という条件に合致したレコードを抽出して
52
40
 
53
- | 1 | AAA | 1 | AAA | 1 |
41
+   どちらか一方の値に `NAME`を統一する
54
42
 
55
- | 2 | BBB | 3 | BBB | 0 |
43
+   ( 矛盾の解消 )
56
44
 
45
+    
46
+
57
- | 3 | CCC | 5 | CCC | 1 |
47
+ 2. `SQL`文において、`NAME`だけでなく
48
+
49
+   生年月日や住所、電話番号などといった列とも結合させ
50
+
51
+   より厳密に個人を特定する
52
+
53
+   ( `SQL`のロジック改善 )

1

2021/09/15 03:39

投稿

mayu-
mayu-

スコア335

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
- ON ( T1.ID = T2.ID AND T1.NAME = T2.NAME )
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