11. ⑤メリット
Join の手間がかからない
ex.) 「食事タグ」がついた生活習慣改善行動(タスク)
を取得
# 1-1. Cypher
MATCH (task:`Task`)<--(tag:`Tag`)
WHERE tag.name = ‘食事’ RETURN task;
# 1-2. SQL
SELECT * FROM tasks
INNER JOIN tags_tasks ON tasks.id = tags_tasks.tag_id
LEFT JOIN tags ON tags.id = task_sets.tag_id
WHERE tags.name = '食事'
12. ⑤メリット
経路検索が容易
ex.) 自分のLv.4 のタスクで食事タグがついているもの
# 2-1. Cypher
MATCH (tag: `Tag`)-->(lv_up_task:`Task`)<-[r*3]-(task:`Task`)
WHERE tag.name = "食事"
RETURN lv_up_task;
# 2-2. SQL
SELECT * FROM tasks
LEFT JOIN level_up_paths as lv2_paths ON tasks.id = lv2_paths.task_id
LEFT JOIN level_up_paths ON lv3_paths ON
lv2_paths.next_task_id = lv3_paths.task_id
LEFT JOIN level_up_paths ON lv4_paths ON
lv3_paths.next_task_id = lv4_paths.task_id
INNER JOIN tags_tasks ON lv4_paths.next_task_id = tags_tasks.task_id
LEFT JOIN tags ON tags.id = tags_tasks.tag_id
WHERE tags.name = '食事'
13. ⑤導入によるメリット
複数条件も容易
ex.) ビタミン, 夏, 間食タグのうち、2つ以上持つタスク
# 3-1. Cypher
MATCH (task:`Task`)<-[r]-(tag:`Tag`)
WHERE tag.name IN ['ビタミン', '夏', '間食']
WITH task, count(r) as tags_count
WHERE tags_count >= 2 RETURN task;
# 3-2. SQL
SELECT * FROM tasks
LEFT JOIN tasks.id = filter.id
( SELECT tasks.id, COUNT (*) as tags_count FROM tasks
INNER JOIN tags_tasks ON tasks.id = tags_tasks.tag_id
LEFT JOIN tags ON tags.id = task_sets.tag_id
WHERE tag.name IN ['ビタミン', '夏', '間食']
GROUP tasks.id
HAVING tags_count >= 2
) as filter