我想回归"父母"注意,from_person_id = 2.我还想返回所有"父母"记下孩子的行。
以下是notes表中的4行示例。我的查询应该返回所有这四个注释。相反,它只返回一个。
mysql> SELECT * FROM notes WHERE note_id <= 4;
+---------+----------------+----------------+----------------+
| note_id | parent_note_id | thread_note_id | from_person_id |
+---------+----------------+----------------+----------------+
| 1 | 0 | 1 | 2 |
| 2 | 1 | 1 | 5 |
| 3 | 1 | 1 | 5 |
| 4 | 1 | 1 | 5 |
+---------+----------------+----------------+----------------+
4 rows in set (0.00 sec)
mysql> SELECT DISTINCT n.*
-> FROM notes as n
-> JOIN notes as n2 on n2.thread_note_id = n.thread_note_id
-> WHERE n.from_person_id = 2
-> AND n.parent_note_id = 0;
+---------+----------------+----------------+----------------+
| note_id | parent_note_id | thread_note_id | from_person_id |
+---------+----------------+----------------+----------------+
| 1 | 0 | 1 | 2 |
+---------+----------------+----------------+----------------+
1 row in set (0.00 sec)
我找到了一种方法来处理两个子查询,但我试图避免在MySQL中使用子查询。
有人建议如何使用JOIN而不是子查询来获取查询以返回父笔记及其所有子项吗?
答案 0 :(得分:1)
我认为你会这样做:
select n.*
from notes n
where n.parent_note_id = (select n2.note_id
from notes n2
where n2.from_person_id = 2
) or
n.from_person_id = 2;
为获得最佳效果,您需要notes(from_person_id, note_id)
上的索引。