0

こんにちは皆さん、次のクエリで mysql にこのエラーがあります。どこが間違っているのかわかりません。助けてくれてありがとう:)

SELECT a.*,b.*,users.*,
    (SELECT p.msg_text,p.occured_at 
    FROM message_private p 
    WHERE p.group_id=a.group_id 
    ORDER BY p.occured_at DESC LIMIT 1) as message,
    f.countf,message.occured_at
FROM message_group a
INNER JOIN message_group b ON a.group_id=b.group_id
INNER JOIN users ON users.profile_id = b.profile_id
LEFT JOIN 
(
    SELECT COUNT(profile_id) countf, id_group
    FROM message_view
    WHERE profile_id = 'sN07X2'
    GROUP BY id_group
) f
  on f.id_group = b.group_id
WHERE a.profile_id = 'sN07X2'
    AND b.profile_id != a.profile_id 
    AND countf > 0 
ORDER BY p.occured_at DESC 
LIMIT 9
4

2 に答える 2

1

これ :

 (SELECT p.msg_text,p.occured_at 
    FROM message_private p 
    WHERE p.group_id=a.group_id 
    ORDER BY p.occured_at DESC LIMIT 1) as message

1 の値を返す必要があり、2 を返すため、エラーが発生します

解決策 1:

CONCAT(p.msg_text,p.occured_at )

解決策 2:

p.msg_textforとfor の 2 つのサブクエリがありますp.occured_at

于 2013-07-04T09:33:17.173 に答える
1

クエリのフィールド リストは

SELECT a.*,b.*,users.*,
    (SELECT p.msg_text,p.occured_at 
    FROM message_private p 
    WHERE p.group_id=a.group_id 
    ORDER BY p.occured_at DESC LIMIT 1) as message,
    f.countf,message.occured_at

これにより、サブクエリの結果が としてエイリアス化されmessageます。

しかし、サブクエリは 2 つの列を選択します。

于 2013-07-04T09:33:08.963 に答える