Mysql:获取每个对话的参与者列表

时间:2016-08-23 18:04:48

标签: mysql

我有2个表conversationparticipants,我想获得每个表中的对话和参与者列表。我是否可以只在一个查询中执行此操作,或者我必须执行2个查询以进行会话,第二个查询以获取每个会话的参与者?

我试过

SELECT c.*, (SELECT p.user FROM participants p WHERE p.conversation_id =  c.id ) AS participants 
FROM `conversation` c
ORDER BY c.date DESC

但我得到"错误1242子查询返回超过1行"这是正常的!

2 个答案:

答案 0 :(得分:2)

使用INNER JOIN选择共享公共ID的不同表的部分。像这样:

SELECT c.*, p.user
FROM conversation AS c INNER JOIN participants AS p ON p.conversation_id = c.id
ORDER BY c.date DESC

答案 1 :(得分:1)

现在您正在使用子查询

(SELECT p.user FROM participants p WHERE p.conversation_id =  c.id ) 

在您正在创建的表格中接收新列。一列只有每行一个值,而不是多个值。因此在这种情况下会抛出错误。如果您确信不会错过数据,则可以强制子查询每次使用聚合运行时返回一个

(SELECT max(p.user) FROM participants p WHERE p.conversation_id =  c.id ) 

但是如果多个值不同并且仍然很重要,那么在大多数情况下,您可能希望按照我的朋友Erik的说法进行连接。

您正在寻找加入。

SELECT c.*, p.user 

FROM conversation c
inner join
Participants p
  on p.conversation_id = c.id
ORDER BY c.date DESC