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

回答編集履歴

4

追記

2017/02/22 18:44

投稿

退会済みユーザー
answer CHANGED
@@ -32,4 +32,11 @@
32
32
 
33
33
  ただし、この場合、定休日が「月曜と火曜がともに休日」のものはヒットしないが、
34
34
  「月曜と水曜(火曜以外)が休日」の場合はヒットする。極端な例だけど、「月曜、水曜、木曜、金曜、土曜、日曜すべて休日で営業日は火曜だけ」というものもヒットする。
35
- 「月曜のみ休日のショップ」を検索したい場合は、他の検索方法が必要。yambejpさんのSQLも同様。
35
+ 「月曜のみ休日のショップ」を検索したい場合は、他の検索方法が必要。yambejpさんのSQLも同様。
36
+
37
+ #余談ですが...
38
+
39
+ 「○曜日が休日の店舗」を検索するというオペレーションは、一体なんのために実装する必要があるのか。。。
40
+ 通常、「月曜日に営業している店舗」を検索したいというのが普通。
41
+
42
+ 休日の店舗を検索なんて、空き巣狙いの窃盗団くらいしか役に立たないと思いますが。

3

修正

2017/02/22 18:44

投稿

退会済みユーザー
answer CHANGED
@@ -21,7 +21,7 @@
21
21
  on SH.holiday = W.id
22
22
  where
23
23
  W.id = '0'
24
- AND id IN (
24
+ AND S.id IN (
25
25
  SELECT shop_id FROM shop_holiday
26
26
  WHERE holiday IN (1, 2)
27
27
  GROUP BY shop_id having count(shop_id) = 1

2

追記

2017/02/22 07:18

投稿

退会済みユーザー
answer CHANGED
@@ -3,4 +3,33 @@
3
3
  WHERE id IN (
4
4
  SELECT shop_id FROM shop_holiday WHERE holiday IN (1, 2)
5
5
  )
6
- ```
6
+ ```
7
+
8
+ ---
9
+
10
+ #質問に提示されたSQLを基にしたサンプル
11
+
12
+ ```sql
13
+ select
14
+ S.name as shop_name
15
+ , group_concat(W.name) as holidays
16
+ from
17
+ shop S
18
+ left join shop_holiday SH
19
+ on S.id = SH.shop_id
20
+ left join week W
21
+ on SH.holiday = W.id
22
+ where
23
+ W.id = '0'
24
+ AND id IN (
25
+ SELECT shop_id FROM shop_holiday
26
+ WHERE holiday IN (1, 2)
27
+ GROUP BY shop_id having count(shop_id) = 1
28
+ )
29
+ group by
30
+ S.id
31
+ ```
32
+
33
+ ただし、この場合、定休日が「月曜と火曜がともに休日」のものはヒットしないが、
34
+ 「月曜と水曜(火曜以外)が休日」の場合はヒットする。極端な例だけど、「月曜、水曜、木曜、金曜、土曜、日曜すべて休日で営業日は火曜だけ」というものもヒットする。
35
+ 「月曜のみ休日のショップ」を検索したい場合は、他の検索方法が必要。yambejpさんのSQLも同様。

1

修正

2017/02/22 07:13

投稿

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