MYSQL离开连接(如果id在其他表中,则为1,否则为0)

时间:2017-07-14 19:43:07

标签: mysql if-statement left-join

我有一个表EVENT_COMMENTS和EVENT_COMMENTS_LIKES,一切正常,但我想检查我是否已经喜欢这个评论。所以我使用likes表进行左连接(有外键(comment_id和user_id)),如果那个user_id是我自己的id,我想输出= true。

但它根本不起作用。我的意思是我得到所有ID的l.User_ID列表(我计算了喜欢的数量),但我无法检查我的ID是否在那里。 54 在这种情况下是我的 ID。

SELECT c.Comment_ID,c.Event_ID,c.User_ID,count(l.User_ID) as amount_likes,

(case l.User_ID when 54 THEN 'true' ELSE 'false' END) as is_liked

FROM EVENT_COMMENTS c 
left join USERINFO u on u.USERID=c.User_ID
left join EVENT_COMMENTS_LIKES l on l.Comment_ID = c.Comment_ID
WHERE Event_ID=121514
GROUP BY c.Comment_ID
ORDER BY updated_time DESC

粗体的是棘手的。

This is the error: Expression #10 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'markusp.l.User_ID' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

感谢您的帮助:)

3 个答案:

答案 0 :(得分:0)

尝试在GROUP BY中包含所有非聚合列。在您的示例中,它们将是:c.Comment_ID,c.Event_ID,c.User_ID

答案 1 :(得分:0)

如果每个用户只能使用一次comnent,那么使用condtional计数代替(case l.User_ID when 54 THEN 'true' ELSE 'false' END) as is_liked表达式:

sum(l.User_ID = 54) as is_liked

l.User_ID = 54评估为真或假(1或0),每个评论总结一次。

由于您使用聚合函数sum(),因此您不会收到问题中显示的错误消息。

答案 2 :(得分:-1)

正如Shadow所说,错误消息包含解决方案。尝试取消设置SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

{{1}}

重新运行查询。