繁体   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