回答編集履歴

2

説明追記

2019/11/25 02:52

投稿

hatena19
hatena19

スコア33620

test CHANGED
@@ -107,3 +107,21 @@
107
107
 
108
108
 
109
109
  このような設計にすれば、「文書マスター」クエリのような複雑なSQLは不必要になりますし、データとして格段に扱いやすくなるはずです。
110
+
111
+
112
+
113
+ ---
114
+
115
+ あと、**廃止済み** フィールドで、存続, 廃止済み, 状況不明 という3つの状況を記録したいなら、Yes/No型でなく、数値型にして、
116
+
117
+ 0:存続
118
+
119
+ 1:廃止済み
120
+
121
+ 2:状況不明
122
+
123
+ というようにするのが意味か明確になると思います。
124
+
125
+ Nullだと、状況不明なのか入力忘れなのか曖昧になります。
126
+
127
+ 入力方法としてはコンボボックスとかオプショングループにすると分かりやすくなります。

1

追記

2019/11/25 02:52

投稿

hatena19
hatena19

スコア33620

test CHANGED
@@ -27,3 +27,83 @@
27
27
 
28
28
 
29
29
  チェックボックスが ■ はNull
30
+
31
+
32
+
33
+ 追記
34
+
35
+ ---
36
+
37
+ 編集、追記されたテーフル情報、SQLをみて
38
+
39
+ クエリと結合するとFalseになることを確認しました。
40
+
41
+ 下記のようなSQLで対処することになりそうです。
42
+
43
+
44
+
45
+ ```sql
46
+
47
+ SELECT a.*, IIf(b.文書番号 Is Null,Null,b.廃止済) AS 廃止済
48
+
49
+ FROM 文書マスタ AS a LEFT JOIN 文書廃止テーブル AS b ON a.文書番号=b.文書番号;
50
+
51
+ ```
52
+
53
+ ただ、そもそものテーブル設計が間違っていると思います。
54
+
55
+
56
+
57
+ **文書番号** と **REV** は一対多の関係です。
58
+
59
+ また、**文書番号** と **廃止済** は一対一の関係です。
60
+
61
+
62
+
63
+ 一対多の関係のデータはテーブルを分割すべきです。
64
+
65
+ 一対一の関係のデータはひとつのテーブルにまとめるべきです。
66
+
67
+ これはデータベース設計のセオリーです。
68
+
69
+
70
+
71
+ 上記を考慮すると下記のような設計になります。
72
+
73
+
74
+
75
+ 文書マスター
76
+
77
+
78
+
79
+ | 文書番号 | タイトル | 廃止済み |
80
+
81
+ |----------|------------|----------|
82
+
83
+ | 1 | 取扱説明書 | True |
84
+
85
+ | 2 | 仕様書 | False |
86
+
87
+ | 3 | 領収書 | Null |
88
+
89
+
90
+
91
+ 文書Rev管理
92
+
93
+
94
+
95
+ | 文書番号 | rev |
96
+
97
+ |----------|-----|
98
+
99
+ | 1 | 1 |
100
+
101
+ | 1 | 2 |
102
+
103
+ | 2 | 1 |
104
+
105
+ | 3 | 1 |
106
+
107
+
108
+
109
+ このような設計にすれば、「文書マスター」クエリのような複雑なSQLは不必要になりますし、データとして格段に扱いやすくなるはずです。