[英]Problem with SQL query [Inner join and multiple selects]
这是我的查询:
SELECT * FROM
(SELECT messages.*,
users.*
FROM `afo_messages` as messages
INNER JOIN `key_users` as users ON messages.user_id = users.id
WHERE messages.category_id=5
ORDER BY messages.id DESC LIMIT 30) ilv
ORDER BY messages.id ASC
错误是“#1060 - 列名 'id' 重复”。
表 afo_messages 列:
id | user_id | category_id | parent_id | message | create_date | update_date | status
表 key_users 列:
id | name | email | phone | pwd | active | role | invite_id | download_link | date
我做错了什么?
谢谢!
可以肯定的是,当您运行内部查询时,结果集有两列称为 ID(来自消息,一列来自用户); 然后您对该子查询运行查询,而解析器不理解它。
尝试:
SELECT * FROM
(SELECT messages.id as message_id,
messages.user_id,
....all other columns from messages
users.id as real_user_id,
users.name,
..... all other columns from users
FROM `afo_messages` as messages
INNER JOIN `key_users` as users ON messages.user_id = users.id
WHERE messages.category_id=5
ORDER BY messages.id DESC LIMIT 30) ilv
ORDER BY message_id ASC
您正在选择名为ID
的两列,而其中一列没有别名。 你真的需要两个表中的所有列吗? 这通常是不好的做法。 您最好确切地指定您想要的列并为其中一个ID
设置别名。 例如:
SELECT * FROM
(SELECT messages.ID,
messages.message,
users.id as UserId, --aliasing this column to UserId
users.name,
users.email
FROM `afo_messages` as messages
INNER JOIN `key_users` as users ON messages.user_id = users.id
WHERE messages.category_id=5
ORDER BY messages.id DESC LIMIT 30) ilv
ORDER BY messages.id ASC
您的内部查询说SELECT messages.*, users.*...
并且afo_messages
和key_users
都有一个id
字段。 选择一个,或者给它们起别名。
您有两个id
列,每个表中都有一个。 您不需要使用SELECT *
和至少其中一个别名来给它一个独特的名称。
SELECT * FROM (SELECT messages.id AS messageid, ...
它与错误消息不匹配,但您的最终 ORDER BY 不应该是 ilv.id 吗?
在您的外部查询的上下文中,从未引用过名为“message”的表。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.