Sql查询选择这个用户所在的每个组内每个人的所有消息

Posted

技术标签:

【中文标题】Sql查询选择这个用户所在的每个组内每个人的所有消息【英文标题】:Sql query select all messages from everybody inside every group where this one user is at 【发布时间】:2018-04-05 05:39:04 【问题描述】:

我正在尝试从用户所在的 2 个组中获取来自每个用户的所有消息。但我不知道如何从每个组中获取所有消息。到目前为止,这是我的代码:

SELECT DISTINCT m.*
FROM `message` m 
INNER JOIN users u
ON u.id = m.idUser
LEFT JOIN whats_app w
ON w.idUser= u.id 
WHERE u.id = w.idUser

所以 2 个组中只有一个用户。我不想从 ONE 用户所在的组内的每个人那里获取所有消息。

这是一些简单的 sql 查询和示例:

    create table users (
id                  int         PRIMARY KEY         NOT NULL,
name                varchar(60)
);

create table whatsapp(
idUser              ,
idGroup             int
);

create table allGroups(
id                  int         PRIMARY KEY         NOT NULL,
name                varchar(60)
);

create table message_send(
id                  int,
idUser              int,
message             text
);

INSERT INTO users(id, name) VALUES
(1, 'John'),
(2, 'Martijn'),
(3, 'Rick'),
(4, 'Vera'),
(5, 'Leon');

INSERT INTO allGroups(id, name) VALUES
(1, 'School'),
(2, 'Friends'),
(3, 'moreFriends'),
(4, 'secretmeeting');

INSERT INTO message_send(id, idUser, message) VALUES
(1, 2, 'How are you feeling today?'),
(2, 1, 'What up?'),
(3, 4, 'I am fine, you?'),
(4, 1, 'hi!');

【问题讨论】:

编辑您的问题并提供示例数据和所需结果。 我不确定你的问题是你想要获得一个地区的所有用户,然后获得这些用户的所有地区? 您的预期输出是什么?问题不清楚。 嗯,我希望看到每条消息都作为输出。但是当我已经将组名放在 message_send 表中时,它就可以了。 【参考方案1】:
create table message_send(
id                  int,
idUser              int,
idGroup             int,
message             text
);

像这样创建消息表,然后直接加入用户和组,您将获得表 watsapp 不需要的输出

select  b.name,message 
from 
message_send as a,
users as b
where
a.idUser=b.id

同样加入组表

【讨论】:

以上是关于Sql查询选择这个用户所在的每个组内每个人的所有消息的主要内容,如果未能解决你的问题,请参考以下文章

如何编写这个 Linq-to-SQL 选择查询

sql查出每个科目成绩前三名

SQL:查询获取特定组的所有用户以及所有组的每个用户

sql 分组排序

如何计算列的每个值所在的百分位数? (Spark SQL)[重复]

如何在 SQL 中测试每个组内的列值序列(基于时间戳)?