回答編集履歴

3

書式の訂正

2017/06/26 08:36

投稿

motuo
motuo

スコア3027

test CHANGED
@@ -1,6 +1,8 @@
1
1
  副問合せを使えば、いけそうな気がします。
2
2
 
3
+
4
+
3
- >再追記(not existsを使います)
5
+ > 再追記(not existsを使います)
4
6
 
5
7
  ```SQL
6
8
 

2

見落としがあったので再追記

2017/06/26 08:35

投稿

motuo
motuo

スコア3027

test CHANGED
@@ -1,8 +1,42 @@
1
- 副問合せを使えば、いけそうな気がします。(未検証です。スイマセン)
1
+ 副問合せを使えば、いけそうな気がします。
2
+
3
+ >再追記(not existsを使います)
4
+
5
+ ```SQL
6
+
7
+ UPDATE TBL1
8
+
9
+ SET
10
+
11
+ DEL = 1
12
+
13
+ WHERE
14
+
15
+ NOT EXISTS (
16
+
17
+ SELECT
18
+
19
+ *
20
+
21
+ FROM
22
+
23
+ TBL2
24
+
25
+ WHERE
26
+
27
+ TBL1.ID = TBL2.ID
28
+
29
+ AND TBL1.SEQ = TBL2.SEQ
30
+
31
+ )
32
+
33
+ ```
2
34
 
3
35
 
4
36
 
37
+
38
+
5
- > 更新後SQL
39
+ > 更新後SQL(文字結合を使っています。SQLとしてはあまり良くないと思います)
6
40
 
7
41
  ```SQL
8
42
 

1

SQL\(誤りがあったので追記\)

2017/06/26 08:35

投稿

motuo
motuo

スコア3027

test CHANGED
@@ -2,30 +2,48 @@
2
2
 
3
3
 
4
4
 
5
+ > 更新後SQL
6
+
5
7
  ```SQL
6
8
 
7
- Update テーブル1 as t1 set 削除フラグ = '1'
9
+ UPDATE TBL1
8
10
 
9
- where t1.ID IN
11
+ SET
10
12
 
11
- (SELECT テーブル1.id
13
+ DEL = 1
12
14
 
13
- FROM テーブル1
15
+ WHERE
14
16
 
15
- LEFT JOIN テーブル2
17
+ CONCAT(TBL1.ID, TBL1.SEQ) IN (
16
18
 
17
- ON テーブル1.シーケンス番号 = テーブル2.シーケンス番号
19
+ SELECT
18
20
 
19
- AND テーブル1.ID = テーブル2.ID
21
+ *
20
22
 
21
- WHERE テーブル2.シーケンス番号 IS NULL
23
+ FROM
22
24
 
23
- AND テーブル2.ID IS NULL)
25
+ (
24
26
 
27
+ SELECT
25
28
 
29
+ CONCAT(TBL1.ID, TBL1.SEQ)
26
30
 
31
+ FROM
27
32
 
33
+ TBL1
28
34
 
35
+ LEFT OUTER JOIN TBL2
29
36
 
37
+ ON TBL1.ID = TBL2.ID
38
+
39
+ AND TBL1.SEQ = TBL2.SEQ
40
+
41
+ WHERE
42
+
43
+ TBL2.ID IS NULL
44
+
45
+ ) AS tmp
46
+
47
+ )
30
48
 
31
49
  ```