MySQL在同一个表上选择其他行

时间:2016-06-23 20:47:01

标签: mysql

我想回归"父母"注意,from_person_id = 2.我还想返回所有"父母"记下孩子的行。

  • A"父母" note的parent_note_id为0。
  • A"孩子" note的parent_note_id等于" parent"注意'thread_note_id。
  • 父母"父母"和孩子"注释具有相同的thread_note_id。

以下是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而不是子查询来获取查询以返回父笔记及其所有子项吗?

1 个答案:

答案 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)上的索引。