簡體   English   中英

SQL 查詢問題 [內連接和多選]

[英]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_messageskey_users都有一個id字段。 選擇一個,或者給它們起別名。

您有兩個id列,每個表中都有一個。 您不需要使用SELECT *和至少其中一個別名來給它一個獨特的名稱。

SELECT * FROM (SELECT messages.id AS messageid, ...

它與錯誤消息不匹配,但您的最終 ORDER BY 不應該是 ilv.id 嗎?

在您的外部查詢的上下文中,從未引用過名為“message”的表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM