Mysql左连接和合并列

sli*_*ier 2 mysql

+----------------------+
| post_id | message    |
+----------------------+
| 1       | message 1  |
+----------------------+
| 2       | message 2  |
+----------------------+

+----------+---------+-------------------------+
| reply_id | post_id |message                  |
+----------+---------+-------------------------+
|    1     |    1    |  reply 1 to message 1   |
+----------+---------+-------------------------+
|    2     |    1    |  reply 2 to message 1   |
+----------+---------+-------------------------+
|    3     |    1    |  reply 3 to message 1   |
+----------+---------+-------------------------+
|    4     |    2    |  reply 1 to message 2   |
+----------+---------+-------------------------+
Run Code Online (Sandbox Code Playgroud)

我有这个两表名postpost_repliespost_idpost_replies是FK进行PK表post 我想要做的就是找到岗位信息,并回复的一列只有

如果我运行这样的东西:

SELECT p.message, pr.message FROM `posts` AS p LEFT JOIN post_replies AS pr ON p.post_id = pr.post_id
Run Code Online (Sandbox Code Playgroud)

它会返回这样的东西

+-----------+-------------------------+
| message   |   message               |
+-----------+-------------------------+
| message 1 |  reply 1 to message 1   |
+-----------+-------------------------+
| message 1 |  reply 2 to message 1   |
+-----------+-------------------------+
| message 1 |  reply 3 to message 1   |
+-----------+-------------------------+
| message 2 |  reply 1 to message 2   |
+-----------+-------------------------+
Run Code Online (Sandbox Code Playgroud)

有没有办法我可以得到这样的结果

+-------------------------+
|   message               |
+-------------------------+
|   message 1             |
+-------------------------+
|  reply 1 to message 1   |
+-------------------------+
|  reply 2 to message 1   |
+-------------------------+
|  reply 3 to message 1   |
+-------------------------+
|   message 2             |
+-------------------------+
|  reply 1 to message 2   |
+-------------------------+
Run Code Online (Sandbox Code Playgroud)

如果我跑

SELECT p.message FROM `posts` AS p LEFT JOIN post_replies AS pr ON p.id = pr.post_id
Run Code Online (Sandbox Code Playgroud)

这将从post表中返回消息

或者

SELECT pr.message FROM `posts` AS p LEFT JOIN post_replies AS pr ON p.id = pr.post_id
Run Code Online (Sandbox Code Playgroud)

这将从表中返回的消息post_replies

有可能吗?

非常感谢任何帮助

Boh*_*ian 6

UNION 您提供的两个查询并引入正确的排序:

SELECT * FROM (
  SELECT p.id, 0 x, p.message
  FROM posts AS p
  LEFT JOIN post_replies AS pr ON p.id = pr.post_id
  UNION ALL
  SELECT p.id, pr.id, pr.message
  FROM posts AS p
  LEFT JOIN post_replies AS pr ON p.id = pr.post_id
) x
ORDER BY 1, 2
Run Code Online (Sandbox Code Playgroud)

如果您不想重复,请将“UNION ALL”更改为“UNION”。