回答編集履歴

4

追記

2017/02/22 18:44

投稿

退会済みユーザー
test CHANGED
@@ -67,3 +67,17 @@
67
67
  「月曜と水曜(火曜以外)が休日」の場合はヒットする。極端な例だけど、「月曜、水曜、木曜、金曜、土曜、日曜すべて休日で営業日は火曜だけ」というものもヒットする。
68
68
 
69
69
  「月曜のみ休日のショップ」を検索したい場合は、他の検索方法が必要。yambejpさんのSQLも同様。
70
+
71
+
72
+
73
+ #余談ですが...
74
+
75
+
76
+
77
+ 「○曜日が休日の店舗」を検索するというオペレーションは、一体なんのために実装する必要があるのか。。。
78
+
79
+ 通常、「月曜日に営業している店舗」を検索したいというのが普通。
80
+
81
+
82
+
83
+ 休日の店舗を検索なんて、空き巣狙いの窃盗団くらいしか役に立たないと思いますが。

3

修正

2017/02/22 18:44

投稿

退会済みユーザー
test CHANGED
@@ -44,7 +44,7 @@
44
44
 
45
45
  W.id = '0'
46
46
 
47
- AND id IN (
47
+ AND S.id IN (
48
48
 
49
49
  SELECT shop_id FROM shop_holiday
50
50
 

2

追記

2017/02/22 07:18

投稿

退会済みユーザー
test CHANGED
@@ -9,3 +9,61 @@
9
9
  )
10
10
 
11
11
  ```
12
+
13
+
14
+
15
+ ---
16
+
17
+
18
+
19
+ #質問に提示されたSQLを基にしたサンプル
20
+
21
+
22
+
23
+ ```sql
24
+
25
+ select
26
+
27
+ S.name as shop_name
28
+
29
+ , group_concat(W.name) as holidays
30
+
31
+ from
32
+
33
+ shop S
34
+
35
+ left join shop_holiday SH
36
+
37
+ on S.id = SH.shop_id
38
+
39
+ left join week W
40
+
41
+ on SH.holiday = W.id
42
+
43
+ where
44
+
45
+ W.id = '0'
46
+
47
+ AND id IN (
48
+
49
+ SELECT shop_id FROM shop_holiday
50
+
51
+ WHERE holiday IN (1, 2)
52
+
53
+ GROUP BY shop_id having count(shop_id) = 1
54
+
55
+ )
56
+
57
+ group by
58
+
59
+ S.id
60
+
61
+ ```
62
+
63
+
64
+
65
+ ただし、この場合、定休日が「月曜と火曜がともに休日」のものはヒットしないが、
66
+
67
+ 「月曜と水曜(火曜以外)が休日」の場合はヒットする。極端な例だけど、「月曜、水曜、木曜、金曜、土曜、日曜すべて休日で営業日は火曜だけ」というものもヒットする。
68
+
69
+ 「月曜のみ休日のショップ」を検索したい場合は、他の検索方法が必要。yambejpさんのSQLも同様。

1

修正

2017/02/22 07:13

投稿

退会済みユーザー
test CHANGED
@@ -1,3 +1,5 @@
1
+ ```sql
2
+
1
3
  SELECT name FROM shop
2
4
 
3
5
  WHERE id IN (
@@ -5,3 +7,5 @@
5
7
  SELECT shop_id FROM shop_holiday WHERE holiday IN (1, 2)
6
8
 
7
9
  )
10
+
11
+ ```