我有查询问题你能告诉我哪里错了吗?
我有3张桌子:
用户:
`users` (
`id` int(11) AUTO_INCREMENT,
`first_name` varchar(16),
`last_name` varchar(16)
`email` varchar(16)
`password` varchar(32)
`phone` varchar(13)
`age` tinyint(4)
`gender` varchar(6)
)
users_eyes:
`users_eyes` (
`user_id` int(4),
`user_eyescolor_id` tinyint(2),
UNIQUE KEY `user_id` (`user_id`,`user_eyescolor_id`)
)
users_eyestype:
`users_eyestype` (
`user_id` int(4),
`user_eyestype_id` tinyint(2),
UNIQUE KEY `user_id` (`user_id`,`user_eyestype_id`)
)
这是我的查询
SELECT
SQL_CALC_FOUND_ROWS
u.first_name,
u.last_name,
u.age,
u.gender,
u.phone,
u.id
, GROUP_CONCAT(DISTINCT ue.user_eyescolor_id SEPARATOR ' ' ) as eyes_color
, GROUP_CONCAT(DISTINCT uet.user_eyestype_id SEPARATOR ' ' ) as eyes_type
FROM users u
LEFT JOIN users_eyes ue ON u.id = ue.user_id
LEFT JOIN users_eyestype uet ON u.id = uet.user_id
WHERE
ue.user_eyescolor_id IN (1,2,3,4)
GROUP BY u.id
HAVING
COUNT(ue.user_id) = 4
结果是一个有2种眼睛的男人,而不是这种有4种眼睛的男人 在加入和eyes_type之前,一切都很完美。
答案 0 :(得分:0)
让测试数据正确使用会很不错。 可能你需要COUNT(不同的ue.user_id)。
并且不需要LEFT JOIN users_eyes - 内部联接更适合在where和having子句中使用的users_eyes字段。
<强>更新强>: 见a fixed query
<强>说明强>: 如果用户有例如加入后4个users_eyes和3个users_eyestype他/她获得12条记录(笛卡尔积)。这就是 COUNT(ue.user_id)失败的原因。
<强>解强>: 请改用COUNT(user_eyescolor_id)= 4。在将来,我会建议更改查询,但没有简单的解决方法。