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

回答編集履歴

2

追記

2020/12/08 07:17

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -16,4 +16,40 @@
16
16
  facilities_trait=(flag, type, facilities_id, rooms_id)
17
17
  rooms=(flag, status, articles_id, id)
18
18
  articles=(flag, id)
19
- ※項目の並びは、カーディナリティに合わせて適宜変更が必要です。
19
+ ※項目の並びは、カーディナリティに合わせて適宜変更が必要です。
20
+
21
+ 追記
22
+ --
23
+ ※SQLが変更されたので、内容に合わせて追記
24
+ 素直に記述。
25
+ ```SQL
26
+ SELECT * FROM facilities_trait
27
+ WHERE flag = 2 AND type in (1, 3)
28
+ AND trait_id in (
29
+ SELECT id FROM articles
30
+ WHERE flag = 2
31
+ AND id in (
32
+ SELECT articles_id FROM rooms
33
+ WHERE flag = 2 AND status = 2
34
+ AND id in (
35
+ SELECT trait_id FROM facilities_trait
36
+ WHERE facilities_id = 31
37
+ )
38
+ )
39
+ )
40
+ ```
41
+ 条件内をJoinで。
42
+ ```SQL
43
+ SELECT * FROM facilities_trait
44
+ WHERE flag = 2 AND type in (1, 3)
45
+ AND trait_id in (
46
+ select articles.id
47
+ FROM articles
48
+ inner join rooms
49
+ on articles.id = rooms.articles_id
50
+ and articles.flag = 2 and room.flag = 2 AND room.status = 2
51
+ inner join facilities_trait
52
+ on rooms.id=facilities_trait.trait_id
53
+ and facilities_trait.facilities_id = 31
54
+ )
55
+ ```

1

推敲

2020/12/08 07:16

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -14,6 +14,6 @@
14
14
  ```
15
15
  それからそれぞれのテーブルに以下のインデックスがあれば、効率が良くなると思います。
16
16
  facilities_trait=(flag, type, facilities_id, rooms_id)
17
- rooms=(flag, status, id)
17
+ rooms=(flag, status, articles_id, id)
18
18
  articles=(flag, id)
19
19
  ※項目の並びは、カーディナリティに合わせて適宜変更が必要です。