回答編集履歴

5

コード修正

2017/05/24 11:27

投稿

hatena19
hatena19

スコア33782

test CHANGED
@@ -16,13 +16,13 @@
16
16
 
17
17
  where
18
18
 
19
- msb.job_status = 0 and
19
+ job_status = 0 and
20
20
 
21
- msb.lock_flg = 0 and
21
+ lock_flg = 0 and
22
22
 
23
- msb.del_flg = 0 and
23
+ del_flg = 0 and
24
24
 
25
- msb.expire_date >= NOW()
25
+ expire_date >= NOW()
26
26
 
27
27
  ) as msb
28
28
 

4

説明の修正

2017/05/24 11:27

投稿

hatena19
hatena19

スコア33782

test CHANGED
@@ -98,7 +98,7 @@
98
98
 
99
99
  ```
100
100
 
101
- 元々のSQLに `not exsist` 以下を追加しただけです。ただし、下記にもあるように、上のSQLより遅くなります。
101
+ 元々のSQLに `not exsist` 以下を追加しただけです。ただし、下記にもあるように、上のSQLより遅くなる場合が多いです。
102
102
 
103
103
 
104
104
 

3

質問の補足をうけて追記

2017/05/24 09:58

投稿

hatena19
hatena19

スコア33782

test CHANGED
@@ -49,3 +49,57 @@
49
49
 
50
50
 
51
51
  言葉にすると、各テーブルを抽出したもの同士を比較して、テーブル②に存在しないテーブル①のデータを抽出。
52
+
53
+
54
+
55
+ 追記
56
+
57
+ ---
58
+
59
+ > 元々のSQLは条件①のみの以下だったので、できれば、少ない修正で実現できればと考えております。
60
+
61
+
62
+
63
+ ```SQL
64
+
65
+ select
66
+
67
+ mgmt_server_backup_id as mgmtServerBackupId,
68
+
69
+ mst_customer_code as mstCustomerCode
70
+
71
+ from
72
+
73
+ mgmt_server_backup
74
+
75
+ where
76
+
77
+ job_status = 0 and
78
+
79
+ lock_flg = 0 and
80
+
81
+ del_flg = 0 and
82
+
83
+ expire_date is not null and
84
+
85
+ expire_date >= NOW() and
86
+
87
+ not exsist
88
+
89
+ (select * from mgmt_server_backup_share
90
+
91
+ where
92
+
93
+ del_flg = 0 and
94
+
95
+ mgmt_server_backup_share.mgmt_server_backup_id = mgmt_server_backup_share.mgmt_server_backup_id
96
+
97
+ );
98
+
99
+ ```
100
+
101
+ 元々のSQLに `not exsist` 以下を追加しただけです。ただし、下記にもあるように、上のSQLより遅くなります。
102
+
103
+
104
+
105
+ [MySQLで集合差を出す - Qiita](http://qiita.com/Hiraku/items/71873bf31e503eb1b4e1)

2

コードの間違いの訂正

2017/05/24 09:46

投稿

hatena19
hatena19

スコア33782

test CHANGED
@@ -16,16 +16,6 @@
16
16
 
17
17
  where
18
18
 
19
- del_flg = 0
20
-
21
- ) as msb
22
-
23
- left join
24
-
25
- (select * from mgmt_server_backup
26
-
27
- where
28
-
29
19
  msb.job_status = 0 and
30
20
 
31
21
  msb.lock_flg = 0 and
@@ -33,6 +23,16 @@
33
23
  msb.del_flg = 0 and
34
24
 
35
25
  msb.expire_date >= NOW()
26
+
27
+ ) as msb
28
+
29
+ left join
30
+
31
+ (select * from mgmt_server_backup_share
32
+
33
+ where
34
+
35
+ del_flg = 0
36
36
 
37
37
  ) as msbs
38
38
 

1

コードの間違いを訂正

2017/05/24 09:16

投稿

hatena19
hatena19

スコア33782

test CHANGED
@@ -38,7 +38,7 @@
38
38
 
39
39
  on
40
40
 
41
- msb.mgmt_server_backup_id <> msbs.mgmt_server_backup_id
41
+ msb.mgmt_server_backup_id = msbs.mgmt_server_backup_id
42
42
 
43
43
  where
44
44