这是我的查询:
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
我做错了什么?
感谢名单!
答案 0 :(得分:4)
非常确定在运行内部查询时,结果集有两列名为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
答案 1 :(得分:2)
您正在选择两个名为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
答案 2 :(得分:0)
您的内部查询显示SELECT messages.*, users.*...
,afo_messages
和key_users
都有id
字段。选择一个或别名。
答案 3 :(得分:0)
您有两个id
列,每个表一个。您不需要使用SELECT *
和至少其中一个别名来为其指定一个不同的名称。
SELECT * FROM (SELECT messages.id AS messageid, ...
答案 4 :(得分:0)
它与错误消息不匹配,但最终的ORDER BY不应该是ilv.id吗?
在外部查询的上下文中,没有引用名为“message”的表。