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

回答編集履歴

1

修正したSQL

2020/02/03 11:38

投稿

takashikawai
takashikawai

スコア195

answer CHANGED
@@ -1,1 +1,53 @@
1
- 削除対象ではないチケットの添付ファイルと比較して、その中に重複している物理ファイルがないかどうかを調べないといけないですね。前回作成したのは、削除対象のチケットの中だけで重複しているかという処理になってしまっていたので、修正してみました。
1
+ 削除対象ではないチケットの添付ファイルと比較して、その中に重複している物理ファイルがないかどうかを調べないといけないですね。前回作成したのは、削除対象のチケットの中だけで重複しているかという処理になってしまっていたので、修正してみました。
2
+ ===> 修正したSQLです(MySQL)。
3
+
4
+ ```SQL
5
+ SELECT
6
+ db_redmine.issues.id AS チケットID
7
+ , db_redmine.attachments.disk_filename AS 物理ファイル名
8
+ , db_redmine.attachments.id AS 添付ファイルID
9
+ FROM
10
+ db_redmine.issues
11
+ INNER JOIN db_redmine.issue_statuses
12
+ ON db_redmine.issue_statuses.id = db_redmine.issues.status_id
13
+ LEFT JOIN db_redmine.attachments
14
+ ON db_redmine.issues.id = db_redmine.attachments.container_id
15
+ LEFT OUTER JOIN (
16
+ SELECT
17
+ db_redmine.issues.id
18
+ , db_redmine.attachments.disk_filename
19
+ FROM
20
+ db_redmine.issues
21
+ INNER JOIN db_redmine.issue_statuses
22
+ ON db_redmine.issue_statuses.id = db_redmine.issues.status_id
23
+ LEFT JOIN db_redmine.attachments
24
+ ON db_redmine.issues.id = db_redmine.attachments.container_id
25
+ WHERE
26
+ db_redmine.issue_statuses.is_closed = 0
27
+ AND db_redmine.issues.project_id = 3
28
+ UNION
29
+ SELECT
30
+ db_redmine.issues.id
31
+ , db_redmine.attachments.disk_filename
32
+ FROM
33
+ db_redmine.issues
34
+ INNER JOIN db_redmine.issue_statuses
35
+ ON db_redmine.issue_statuses.id = db_redmine.issues.status_id
36
+ LEFT JOIN db_redmine.attachments
37
+ ON db_redmine.issues.id = db_redmine.attachments.container_id
38
+ WHERE
39
+ db_redmine.issue_statuses.is_closed = 1
40
+ AND db_redmine.issues.project_id = 3
41
+ AND db_redmine.issues.closed_on >= (Now() - INTERVAL 6 MONTH)
42
+ ) Query1
43
+ ON db_redmine.attachments.disk_filename = Query1.disk_filename
44
+ WHERE
45
+ db_redmine.attachments.disk_filename IS NOT NULL
46
+ AND Query1.disk_filename IS NULL
47
+ AND db_redmine.issue_statuses.is_closed = 1
48
+ AND db_redmine.issues.project_id = 3
49
+ AND db_redmine.issues.closed_on < (Now() - INTERVAL 6 MONTH)
50
+ ORDER BY
51
+ db_redmine.issues.id
52
+ , db_redmine.attachments.disk_filename
53
+ ```