2011-08-11 7 views
1

ここでは私のクエリです:問題[内部結合し、複数の選択]

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'" です。私が間違ってやっている何

id | name | email | phone | pwd | active | role | invite_id | download_link | date 

id | user_id | category_id | parent_id | message | create_date | update_date | status 

表のkey_users列:

表に列をafo_messages?

Thanx!

答えて

4

内側のクエリを実行すると、結果セットにはIDという2つの列があります(メッセージからは1つで、ユーザーからは1つ)。そのサブクエリに対してクエリを実行すると、パーサはそれを理解しません。

試してみてください。

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 
+0

正しいですが、エラー:#1054 - 'order clause'の 'messages.id'列が不明です。私はそれがこのORDER BY messages.idのためだと思うASC – Mirgorod

+0

hmmm ...それを修正する方法? – Mirgorod

+0

私はthgeの推薦を編集しました –

0

内部クエリにはSELECT messages.*, users.*...と表示され、afo_messageskey_usersのフィールドにはidフィールドがあります。 1つを選択するか、エイリアスにします。

2

IDという2つの列をエイリアシングなしで選択しています。あなたは本当に両方のテーブルのすべての列を必要としますか?これは一般的に悪い習慣です。おそらく、どの列を正確に指定して、IDのうちの1つをエイリアシングする方が良いでしょう。例:

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 
+0

#1054 - 未知の列には、あなたは問題があるかもしれないかを決定するために、トラブルシューティングのわずかな操作を行うことができない「ため句」 – Mirgorod

+1

に「messages.id」? –

0

2つのid列が各表に1つあります。別の名前を付けるには、SELECT *と少なくとも1つのエイリアスを使用しないでください。

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

エラーメッセージと一致しませんが、最後のORDER BYはilv.idであるべきではありませんか?

外部クエリのコンテキストでは、「メッセージ」という名前のテーブルは参照されませんでした。

関連する問題