mysql - mysql中的空值sql连接

标签 mysql sql

我正在执行此查询

SELECT m.chat_id, m.msg_sender_id, m.message, m.id,
       DATE_FORMAT(m.created_at, '%Y-%m-%d %H:%i:%s') as created_at,
       g.id as group_id, g.name as group_name, g.image as group_image
FROM message as m 
INNER JOIN chat as c ON c.id = m.chat_id
LEFT OUTER JOIN group as g ON c.group_id = g.id
WHERE c.id = 434
ORDER BY m.id ASC

我想要实现的是从聊天中获取所有消息,并且如果有聊天涉及组则返回组。组附加到聊天对象(而不是消息对象)。由于某种原因,我在所有行上都得到了group

您能建议我如何实现这一目标吗?

=============编辑==============

group 表结构如下所示:

  `id` int(11) NOT NULL AUTO_INCREMENT,
  `created_at` datetime(6) NOT NULL,
  `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `image` longtext COLLATE utf8_bin,
  `status` int(11) DEFAULT NULL,
  `creator_id` int(11) NOT NULL

chat 表结构如下所示

  `id` int(11) NOT NULL AUTO_INCREMENT,
  `created_at` datetime(6) NOT NULL,
  `group_id` int(11) DEFAULT NULL,
  `person1_id` int(11) NOT NULL,
  `invitation_id` int(11) NOT NULL,

message 表如下所示

  `id` int(11) NOT NULL AUTO_INCREMENT,
  `message` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
  `created_at` datetime(6) NOT NULL,
  `chat_id` int(11) NOT NULL,
  `msg_sender_id` int(11) NOT NULL,

这是查询的结果

434 14  Some text   900 2017-09-10 09:48:56 3   My group 1  image.jpg
434 13  Some text 2 901 2017-09-10 09:48:59 3   My group 1  image.jpg
434 14  Some text 3 935 2017-09-16 15:37:07 3   My group 1  image.jpg
434 14  Some text 4 968 2017-09-21 06:52:56 3   My group 1  image.jpg

最佳答案

评论太长了。

您的查询是正确的。您有一个用于聊天消息内部联接。您有一个左外连接

我认为您可能误解了结果集。结果集是一个表,每行都有所有列。您不会获得一些用于消息的列,然后获得其他用于聊天的列。这就是 SQL 的工作原理。

或者,您的查询按 m.id 排序。也许这种排序恰好将所有带有组的消息带到顶部。

关于mysql - mysql中的空值sql连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46401155/

相关文章:

mysql - 无法使用 mysql 命令行使用 Unicode 字符

python - 交叉包含地理数据的多个大文件的有效方法

PHP - 基于数据库查询发送电子邮件至电子邮件地址

mysql - 连接两个表以显示第二个表中的行数

sql - Oracle SQL 根据列的最大值返回单行

php - 无法从数据库获取数据

mysql - PROCEDURE 的参数数量不正确

python - 如何在给定约束后删除文本?

sql - 不敏感地订购选择结果案例?

sql - 删除名称中多余的中间空格 - SQL