MySQL 连接错误 : Every derived table must have its own alias

标签 mysql join

我查看了围绕 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/

相关文章:

sql - 我需要解决付款问题 - 下面给出的示例(重新编辑)

MySQL 我可以将这两个查询合并在一起吗?

mysql - 多列索引是否比单列索引慢?

php - 想要在查询中显示数据库中包含多个引号的图像

python - Pandas 合并与 bool 索引

PostgreSQL 加入 : delete records present in one table, 但不是另一个

join - 如何将 POLYGON 的字符串类型转换为地理类型 - BigQuery

mysql - 按特殊顺序对表记录进行排序

MySQL (InnoDB) : need to delete column, 和附带的外键约束和索引

MySQL JOIN 和 group by 因此每行有一个 ID