我有2张桌子
Sleep_sessions [id,user_id,(其他一些值)]
音调 [id,sleep_sessions.id(FK),(其他一些值)]
我需要选择10个sleep_sessions,其中user_id = 55,并且每个sleep_session记录至少有2个与之关联的音调记录。
我目前有以下内容;
SELECT `sleep_sessions`.*
FROM (`sleep_sessions`)
JOIN `tones` ON sleep_sessions.id = `tones`.`sleep_session_id`
WHERE `user_id` = 55
GROUP BY `sleep_sessions`.`id`
HAVING count(tones.id) > 4
ORDER BY `started` desc
LIMIT 10
但是我注意到count(tone.id)基本上是整个音调表而不是当前正在加入的sleep_session
非常感谢你的帮助,
安迪
答案 0 :(得分:1)
我不确定您的查询出了什么问题。也许,试试
HAVING count(*)
以下查询可能更具可读性(理解起来可能有点麻烦):
SELECT *
FROM (`sleep_sessions`)
WHERE `user_id` = 55
AND (SELECT count(*) FROM `tones`
WHERE `sleep_sessions`.`id` = `tones`.`sleep_session_id`) > 4
ORDER BY `started` desc
LIMIT 10
这样做的好处是,您不会弄乱您在GROUP BY
和ORDER BY
子句之间创建的错误语义。只有MySQL会接受您的原始查询。以下是一些见解:
http://dev.mysql.com/doc/refman/5.6/en/group-by-hidden-columns.html