我有一个表格,其中存储了所有评论.一些评论是问题,其他 - 答案.所以,我的表看起来像这样:
id parent_id message is_answer answered
1 0 2x2 0 1
2 1 4 1 0
3 0 5x9 0 0
4 1 2x9 0 0
5 1 2x8 0 1
6 5 16 1 0
Run Code Online (Sandbox Code Playgroud)
结果我想得到这张表:
q_id q_message q_answer
1 2x2 4
3 5x9 NULL
4 2x9 NULL
5 2x8 16
Run Code Online (Sandbox Code Playgroud)
所以,如果它们存在,我想得到所有问题和答案.
没有什么可以阻止你将表连接到自身.
SELECT q.id AS q_id, q.message AS q_message, a.message AS q_answer
FROM table AS q
LEFT JOIN table AS a ON a.parent_id = q.id
WHERE q.is_answer = 0;
Run Code Online (Sandbox Code Playgroud)
请注意,这并不能完全显示您想要的输出...因为它显示了问题的所有答案:
+------+-----------+----------+
| q_id | q_message | q_answer |
+------+-----------+----------+
| 1 | 2x2 | 4 |
| 1 | 2x2 | 2x9 |
| 1 | 2x2 | 2x8 |
| 3 | 5x9 | NULL |
| 4 | 2x9 | NULL |
| 5 | 2x8 | 16 |
+------+-----------+----------+
6 rows in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
您请求的输出仅显示问题1的答案"4".我不确定您是否故意这样做 - 如果是这样,您将需要一些额外的GROUP BY或其他逻辑来过滤掉您的答案不想显示.