我必须从一个表中选择一个目录列表,并在另外两个表中执行计数:商店和类别。计数器应该显示有多少商店和类别链接到每个目录。我已经设法使用这个 SQL 查询获得了我需要的功能:
SELECT `catalog`.`id` AS `id`,
`catalog`.`name` AS `name`,
(
SELECT COUNT(*)
FROM `category`
WHERE `category`.`catalog_id` = `catalog`.`id`
AND `category`.`is_archive` = 0
AND `category`.`company_id` = 2
) AS `category_count`,
(
SELECT COUNT(*)
FROM `store`
WHERE `store`.`catalog_id` = `catalog`.`id`
AND `store`.`is_archive` = 0
AND `store`.`company_id` = 2
) AS `store_count`
FROM `catalog`
WHERE `catalog`.`company_id` = 2
AND `catalog`.`is_archive` = 0
ORDER BY `catalog`.`id` ASC;
这按预期工作。但我不喜欢执行子查询,因为它们很慢,而且这个查询可能在 LARGE 列表上表现不佳。有没有使用 JOIN 优化这个 SQL 的方法?提前致谢。