为 A 中的每个项目从 B 和 C 创建对 return val 的查询
Create query to return val from B and C for each item in A
我有一个数据库,其中有一个包含 isos (isos.name) 列表的 table,一个包含具有 agents.id 的代理列表的 table,以及一个table 包含具有 merchants.id.
的商家列表
我想以关注结果结束
isos.name | Agents | Merchants
ISO A | 1 | 7
ISO B | 2 | 96
以下两个查询都单独工作,但我不知道如何将它们组合起来以return 期望的结果:
SELECT `isos`.`name`, COUNT(agents.id)AS Agents
FROM `isos`
LEFT JOIN `agents` ON `agents`.`iso_id` = `isos`.`id`
GROUP BY isos.name;
这个returns:
isos.name |代理商
国际标准化组织 | 1个
ISO B | 2
SELECT `isos`.`name`, COUNT(merchants.id)AS Merchants
FROM `isos`
LEFT JOIN `merchants` ON `merchants`.`iso_id` = `isos`.`id`
GROUP BY isos.name;
这个returns:
isos.name |商家
国际标准化组织 | 7
ISO B | 96
非常感谢您的帮助!
使用相关子查询:
SELECT i.name,
(SELECT COUNT(*)
FROM agents a
WHERE a.iso_id = i.id
) AS Agents,
(SELECT COUNT(*)
FROM merchants m
WHERE m.iso_id = i.id
) AS merchants
FROM isos i;
这假设 name
在 isos
中是唯一的。
使用相关子查询的最重要原因是它会产生正确的答案。您正在沿着不同的维度(大概)进行联接,因此联接将为商家和代理商生成笛卡尔积。
第二个原因是,对于 agents(iso_id)
和 merchantes(iso_id)
上的索引,这应该非常快 -- 而且更快,因为它避免了在外部查询中进行聚合。
我有一个数据库,其中有一个包含 isos (isos.name) 列表的 table,一个包含具有 agents.id 的代理列表的 table,以及一个table 包含具有 merchants.id.
的商家列表我想以关注结果结束
isos.name | Agents | Merchants
ISO A | 1 | 7
ISO B | 2 | 96
以下两个查询都单独工作,但我不知道如何将它们组合起来以return 期望的结果:
SELECT `isos`.`name`, COUNT(agents.id)AS Agents
FROM `isos`
LEFT JOIN `agents` ON `agents`.`iso_id` = `isos`.`id`
GROUP BY isos.name;
这个returns:
isos.name |代理商 国际标准化组织 | 1个 ISO B | 2
SELECT `isos`.`name`, COUNT(merchants.id)AS Merchants
FROM `isos`
LEFT JOIN `merchants` ON `merchants`.`iso_id` = `isos`.`id`
GROUP BY isos.name;
这个returns:
isos.name |商家 国际标准化组织 | 7 ISO B | 96
非常感谢您的帮助!
使用相关子查询:
SELECT i.name,
(SELECT COUNT(*)
FROM agents a
WHERE a.iso_id = i.id
) AS Agents,
(SELECT COUNT(*)
FROM merchants m
WHERE m.iso_id = i.id
) AS merchants
FROM isos i;
这假设 name
在 isos
中是唯一的。
使用相关子查询的最重要原因是它会产生正确的答案。您正在沿着不同的维度(大概)进行联接,因此联接将为商家和代理商生成笛卡尔积。
第二个原因是,对于 agents(iso_id)
和 merchantes(iso_id)
上的索引,这应该非常快 -- 而且更快,因为它避免了在外部查询中进行聚合。