SQL HAVING 从数据库丢失记录
Lost records from DB with SQL HAVING
我不知道为什么我的查询不能正常工作。
当我试图向 devices_count=0 的任何用户显示时,它没有显示。
这是我的查询:
SELECT `u`.`id` AS `usersId`, `u`.`id_user` AS `usersIdUser`, `u`.`name` AS `usersName`,
`u`.`postal` AS `usersPostal`, `u`.`city` AS `usersCity`,
`u`.`street` AS `usersStreet`, `g`.`name` AS `geographyName`,
`e`.`name` AS `expertsName`, `e`.`surname` AS `expertsSurname`,
`o`.`name` AS `ownersName`,
COUNT(`d`.`id`) AS `devices_count`
FROM `users` `u`
LEFT JOIN `devices` `d` ON `u`.`id` = `d`.`user_id`
LEFT JOIN `owners` `o` ON `d`.`comm_id`=`o`.`id`
LEFT JOIN `experts` `e` ON `d`.`expert_id`=`e`.`id`
LEFT JOIN `geography` `g` ON `u`.`voivod`=`g`.`id`
WHERE `d`.`expert_id` LIKE '%' AND `u`.`id` LIKE 3332
AND `u`.`voivod` LIKE '%' AND `u`.`city` LIKE "%" AND `u`.`status` LIKE '%'
GROUP BY `u`.`id`
HAVING COUNT(d.id) BETWEEN 0 AND 99999
ORDER BY devices_count ASC LIMIT 0, 20
ID 为 3332 的用户在数据库中,但安装了 0 个设备 (devices_count=0)。当然,如果不通过 WHERE 条款缩小结果,它仍然不会显示所有结果。所有字段和 JOINed 列都是必需的。
您的 where
子句正在将 left join
转换为内部联接。
除了第一个 table:
,您需要将过滤逻辑移至 on
子句
FROM `users` `u`
LEFT JOIN `devices` `d` ON `u`.`id` = `d`.`user_id` and `d`.`expert_id` LIKE '%'
LEFT JOIN `owners` `o` ON `d`.`comm_id`=`o`.`id`
LEFT JOIN `experts` `e` ON `d`.`expert_id`=`e`.`id`
LEFT JOIN `geography` `g` ON `u`.`voivod`=`g`.`id`
WHERE `u`.`id` LIKE 3332 AND
`u`.`voivod` LIKE '%' AND `u`.`city` LIKE "%" AND `u`.`status` LIKE '%'
我不知道为什么我的查询不能正常工作。 当我试图向 devices_count=0 的任何用户显示时,它没有显示。
这是我的查询:
SELECT `u`.`id` AS `usersId`, `u`.`id_user` AS `usersIdUser`, `u`.`name` AS `usersName`,
`u`.`postal` AS `usersPostal`, `u`.`city` AS `usersCity`,
`u`.`street` AS `usersStreet`, `g`.`name` AS `geographyName`,
`e`.`name` AS `expertsName`, `e`.`surname` AS `expertsSurname`,
`o`.`name` AS `ownersName`,
COUNT(`d`.`id`) AS `devices_count`
FROM `users` `u`
LEFT JOIN `devices` `d` ON `u`.`id` = `d`.`user_id`
LEFT JOIN `owners` `o` ON `d`.`comm_id`=`o`.`id`
LEFT JOIN `experts` `e` ON `d`.`expert_id`=`e`.`id`
LEFT JOIN `geography` `g` ON `u`.`voivod`=`g`.`id`
WHERE `d`.`expert_id` LIKE '%' AND `u`.`id` LIKE 3332
AND `u`.`voivod` LIKE '%' AND `u`.`city` LIKE "%" AND `u`.`status` LIKE '%'
GROUP BY `u`.`id`
HAVING COUNT(d.id) BETWEEN 0 AND 99999
ORDER BY devices_count ASC LIMIT 0, 20
ID 为 3332 的用户在数据库中,但安装了 0 个设备 (devices_count=0)。当然,如果不通过 WHERE 条款缩小结果,它仍然不会显示所有结果。所有字段和 JOINed 列都是必需的。
您的 where
子句正在将 left join
转换为内部联接。
除了第一个 table:
,您需要将过滤逻辑移至on
子句
FROM `users` `u`
LEFT JOIN `devices` `d` ON `u`.`id` = `d`.`user_id` and `d`.`expert_id` LIKE '%'
LEFT JOIN `owners` `o` ON `d`.`comm_id`=`o`.`id`
LEFT JOIN `experts` `e` ON `d`.`expert_id`=`e`.`id`
LEFT JOIN `geography` `g` ON `u`.`voivod`=`g`.`id`
WHERE `u`.`id` LIKE 3332 AND
`u`.`voivod` LIKE '%' AND `u`.`city` LIKE "%" AND `u`.`status` LIKE '%'