我查看了围绕 S.O 的可能解决方案,但我的查询仍然无法正常工作。
这是查询:
SELECT `messages`.`from_id`,
`messages`.`to_id`,
`messages`.`message`
FROM `messages`
JOIN
(
SELECT `users`.`profile_pic`
FROM `users` AS `from_pic`
WHERE `users`.`id` = `from_id`
)
ON `users`.`id` = `messages`.`from_id`
JOIN
(
SELECT `users`.`profile_pic`
FROM `users` AS `to_pic`
WHERE `users`.`id` = `to_id`
)
ON `users`.`id` = `messages`.`to_id`
WHERE `messages`.`from_id` = 23
AND `messages`.`to_id` = 24
ORDER BY `date_sent` DESC;
表用户
id | profile_pic | name
表消息
message_id | from_id | to_id | message
最佳答案
当你使用子查询时,你需要为它们提供一个别名:
SELECT
`messages`.`from_id`,
`messages`.`to_id`,
`messages`.`message`
FROM `messages`
JOIN
(
SELECT
`from_pic`.`id`,
`from_pic`.`profile_pic`
FROM `users` AS `from_pic`
) u1 --- alias
ON u1.`id` = `messages`.`from_id`
JOIN
(
SELECT
`to_pic`.`id`,
`to_pic`.`profile_pic`
FROM `users` AS `to_pic`
) u2 ---- alias
ON u2.`id` = `messages`.`to_id`
WHERE `messages`.`from_id` = 23
AND `messages`.`to_id` = 24
ORDER BY `date_sent` DESC;
这也可以不用子查询来写:
SELECT
`messages`.`from_id`,
`messages`.`to_id`,
`messages`.`message`
FROM `messages`
JOIN `users` AS `from_pic`
ON `from_pic` = `messages`.`from_id`
JOIN `users` AS `to_pic`
ON `to_pic`.`id` = `messages`.`to_id`
WHERE `messages`.`from_id` = 23
AND `messages`.`to_id` = 24
ORDER BY `date_sent` DESC;
关于MySQL 连接错误 : Every derived table must have its own alias,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44165556/