MySQL连接错误:每个派生表都必须有自己的别名

MySQL连接错误:每个派生表都必须有自己的别名,mysql,join,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`.

我已经研究了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
表格
消息

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;
SELECT `messages`.`from_id`, 
  `messages`.`to_id`, 
  `messages`.`message` 
FROM `messages`
JOIN `users` AS `from_pic` ON `from_pic`.`id` = `messages`.`from_id` 
JOIN `users` AS `to_pic` ON `to_pic`.`id` = `messages`.`from_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 
(
  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;
SELECT `messages`.`from_id`, 
  `messages`.`to_id`, 
  `messages`.`message` 
FROM `messages`
JOIN `users` AS `from_pic` ON `from_pic`.`id` = `messages`.`from_id` 
JOIN `users` AS `to_pic` ON `to_pic`.`id` = `messages`.`from_id` 
WHERE  `messages`.`from_id` = 23 
  AND `messages`.`to_id` = 24 
ORDER BY `date_sent` DESC;

您需要将您的
别名从\u pick
移动到\u pic
子查询中不需要的别名,并在联接条件中相应地使用它们,如下所示:

SELECT `messages`.`from_id`, 
  `messages`.`to_id`, 
  `messages`.`message` 
FROM `messages`
JOIN 
(
  SELECT `users`.`profile_pic` 
  FROM `users`
  WHERE `users`.`id` = `from_id`
) AS `from_pic` 
  ON `from_pic`.`id` = `messages`.`from_id` 
JOIN 
(
  SELECT `users`.`profile_pic` 
  FROM `users` 
  WHERE `users`.`id` = `to_id`
)  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;
更好的是,您甚至不需要子查询:

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;
SELECT `messages`.`from_id`, 
  `messages`.`to_id`, 
  `messages`.`message` 
FROM `messages`
JOIN `users` AS `from_pic` ON `from_pic`.`id` = `messages`.`from_id` 
JOIN `users` AS `to_pic` ON `to_pic`.`id` = `messages`.`from_id` 
WHERE  `messages`.`from_id` = 23 
  AND `messages`.`to_id` = 24 
ORDER BY `date_sent` DESC;

您需要将您的
别名从\u pick
移动到\u pic
子查询中不需要的别名,并在联接条件中相应地使用它们,如下所示:

SELECT `messages`.`from_id`, 
  `messages`.`to_id`, 
  `messages`.`message` 
FROM `messages`
JOIN 
(
  SELECT `users`.`profile_pic` 
  FROM `users`
  WHERE `users`.`id` = `from_id`
) AS `from_pic` 
  ON `from_pic`.`id` = `messages`.`from_id` 
JOIN 
(
  SELECT `users`.`profile_pic` 
  FROM `users` 
  WHERE `users`.`id` = `to_id`
)  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;
更好的是,您甚至不需要子查询:

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;
SELECT `messages`.`from_id`, 
  `messages`.`to_id`, 
  `messages`.`message` 
FROM `messages`
JOIN `users` AS `from_pic` ON `from_pic`.`id` = `messages`.`from_id` 
JOIN `users` AS `to_pic` ON `to_pic`.`id` = `messages`.`from_id` 
WHERE  `messages`.`from_id` = 23 
  AND `messages`.`to_id` = 24 
ORDER BY `date_sent` DESC;

我懂了。我以前尝试过这个方法,但是我遇到了这个错误,所以我不确定是什么问题:
#1054-未知列“users.profile_pic”在“field list”
@nTuply查看我的编辑,您在子查询中为
users
表提供了别名,您需要在其中引用该别名。
#1054-where子句中的未知列“from_id”
错误非常严重。你认为我应该发布我的桌子设计吗?@nTuply那可能会有帮助。
用户
是否有
from\u id
列?添加了表。不,
用户
没有
消息
具有
from_id
to_id
,我正试图与
用户
加入,以获取我看到的每个用户的个人资料图片。我以前尝试过这个方法,但是我遇到了这个错误,所以我不确定是什么问题:
#1054-未知列“users.profile_pic”在“field list”
@nTuply查看我的编辑,您在子查询中为
users
表提供了别名,您需要在其中引用该别名。
#1054-where子句中的未知列“from_id”
错误非常严重。你认为我应该发布我的桌子设计吗?@nTuply那可能会有帮助。
用户
是否有
from\u id
列?添加了表。不,
用户
没有<代码>消息有
from\u id
to\u id
,我正试图加入
用户
以获取每个用户的个人资料图片。如果你要否决投票,你至少应该说答案有什么问题。哎哟。如果你要否决投票,你至少应该说一下答案有什么问题。