MySQL连接错误:每个派生表都必须有自己的别名
我已经研究了S.O.可能的解决方案,但我的查询仍然无法正常运行 问题是: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`.
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
,我正试图加入用户
以获取每个用户的个人资料图片。如果你要否决投票,你至少应该说答案有什么问题。哎哟。如果你要否决投票,你至少应该说一下答案有什么问题。