[英]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.