例えば下記のようなデータがあるとして(本来はテーブルですが、便宜上jsonにしています)、
json
1users = [ 2 { 3 "user_name": "userA", 4 "posts": [ 5 { 6 "post_name": "postA", 7 "comments": [ 8 { 9 "body": "foo" 10 }, 11 { 12 "body": "bar" 13 } 14 ] 15 } 16 ] 17 }, 18 { 19 "user_name": "userB", 20 "posts": [ 21 { 22 "post_name": "postB", 23 "comments": [ 24 { 25 "body": "foo" 26 }, 27 { 28 "body": "foo" 29 } 30 ] 31 } 32 ] 33 } 34]
(上記の json データだと紛らわしいとの指摘を受けましたので、以下テーブルデータも併記しました。)
users
テーブル:
id | name |
---|---|
1 | userA |
2 | userB |
posts
テーブル
id | user_id |
---|---|
1 | 1 |
2 | 2 |
comments
テーブル
id | post_id | body |
---|---|---|
1 | 1 | foo |
2 | 1 | bar |
3 | 2 | foo |
4 | 2 | foo |
このデータに対して、以下のように検索したいです。
posts
を持つusers
;- さらにその
posts
がcomments
を持つ; - さらにその
comments
のすべては "foo" を含む.
例のデータの場合ですと、上記条件をクリアしたユーザはuserB
となります。
サブクエでできるのは分かりますが、パフォーマンスが良くなく、joinで実現できないでしょうか?
(上記はのサンプルのリレーションシップは3層だけですが、実際はもっとリレーションシップが深いです。)
それか、別のもっといいやり方はあるのでしょうか?

回答3件
あなたの回答
tips
プレビュー