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

回答編集履歴

1

追記

2018/12/18 05:17

投稿

takotakot
takotakot

スコア1111

answer CHANGED
@@ -13,4 +13,59 @@
13
13
  orders.voucher_no1 IN(duplicated.voucher_no1, duplicated.voucher_no2)
14
14
  ```
15
15
 
16
- と表記できるはずです。もしうまくいって時間が変わらないのであれば、冗長な記述は少し減らせますね。
16
+ と表記できるはずです。もしうまくいって時間が変わらないのであれば、冗長な記述は少し減らせますね。
17
+
18
+
19
+ 案1
20
+
21
+ ```SQL
22
+ SELECT orders.* FROM orders
23
+ WHERE is_deleted = 0
24
+ AND customer_id = 2
25
+ AND NOT EXISTS(
26
+ SELECT 1 FROM orders duplicated
27
+ WHERE 2 = duplicated.customer_id
28
+ AND duplicated.is_deleted = 0
29
+ AND orders.id != duplicated.id
30
+ AND orders.voucher_no1 IN(duplicated.voucher_no1, duplicated.voucher_no2)
31
+ AND orders.voucher_date - INTERVAL 3 MONTH <= duplicated.voucher_date
32
+ AND duplicated.voucher_date <= orders.voucher_date + INTERVAL 3 MONTH
33
+ )
34
+ AND NOT EXISTS(
35
+ SELECT 1 FROM orders duplicated
36
+ WHERE 2 = duplicated.customer_id
37
+ AND duplicated.is_deleted = 0
38
+ AND orders.id != duplicated.id
39
+ AND orders.voucher_no2 IN(duplicated.voucher_no1, duplicated.voucher_no2)
40
+ AND orders.voucher_date - INTERVAL 3 MONTH <= duplicated.voucher_date
41
+ AND duplicated.voucher_date <= orders.voucher_date + INTERVAL 3 MONTH
42
+ )
43
+ ;
44
+ ```
45
+
46
+ 案2
47
+
48
+ ```SQL
49
+ SELECT orders.* FROM orders
50
+ WHERE is_deleted = 0
51
+ AND customer_id = 2
52
+ AND NOT EXISTS(
53
+ SELECT 1 FROM orders duplicated
54
+ WHERE 2 = duplicated.customer_id
55
+ AND duplicated.is_deleted = 0
56
+ AND orders.id != duplicated.id
57
+ AND duplicated.voucher_no1 IN(orders.voucher_no1, orders.voucher_no2)
58
+ AND orders.voucher_date - INTERVAL 3 MONTH <= duplicated.voucher_date
59
+ AND duplicated.voucher_date <= orders.voucher_date + INTERVAL 3 MONTH
60
+ )
61
+ AND NOT EXISTS(
62
+ SELECT 1 FROM orders duplicated
63
+ WHERE 2 = duplicated.customer_id
64
+ AND duplicated.is_deleted = 0
65
+ AND orders.id != duplicated.id
66
+ AND duplicated.voucher_no2 IN(orders.voucher_no1, orders.voucher_no2)
67
+ AND orders.voucher_date - INTERVAL 3 MONTH <= duplicated.voucher_date
68
+ AND duplicated.voucher_date <= orders.voucher_date + INTERVAL 3 MONTH
69
+ )
70
+ ;
71
+ ```