我有2个表conversation
和participants
,我想获得每个表中的对话和参与者列表。我是否可以只在一个查询中执行此操作,或者我必须执行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行"这是正常的!
答案 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