【发布时间】:2014-08-06 20:48:13
【问题描述】:
如何将 4 个不同表中的信息显示为一张表?我有 4 个包含相关信息的表。这些表包含包、组织子级和系统用户数据。我想查询一个组织订阅了什么类型的包以及在该组织下注册了多少孩子和用户。表中包含的示例数据如下所示。
包表:
| package_id | package_name |
|---|---|
| 12 | Basic |
| 21 | Pro |
| 33 | Premium |
组织机构表:
| org_id | org_name | package_id |
|---|---|---|
| 18 | Marks of Awesomeness | 12 |
| 24 | John Hopkins Hospital | 21 |
| 38 | Teddy and the Wailers | 33 |
| 78 | Lawrence Movers | 12 |
儿童桌:
| id_child | id_org child_name | id_org |
|---|---|---|
| 14 | Mark Walker | 18 |
| 22 | Jane Quinn | 24 |
| 38 | Lily Audrey | 24 |
| 44 | Dona Marie | 18 |
用户表:
| idu | org_id | fname | lname |
|---|---|---|---|
| 87 | 18 | John | Doe |
| 92 | 33 | Jane | Doe |
| 107 | 18 | Martin | Short |
| 112 | 18 | Jason | Seguel |
| 127 | 33 | Josh | Radnor |
我的查询如下图:
SELECT SQL_CALC_FOUND_ROWS `id_org`, `org_name`, `package_name`
,COUNT(id_child) AS child_count, COUNT(idu) AS user_count FROM organisations,packages,children,system_users
WHERE organisations.id_org=children.org_id AND organisations.id_org=system_users.org_id
AND organisations.org_package_id=packages.id_package
查询的问题是它只显示一个组织,如果它有一个孩子和一个用户 使用其 org_id 列出。我想用它订阅的包名列出所有组织的所有数据, 该特定组织下列出的儿童总数,下列出的用户总数 该特定组织,如果组织没有孩子、用户或两者兼有,则为零。 以下是我想要的结果。
期望的结果:
| Organisation | package Name | No of Children | Number of Users |
|---|---|---|---|
| Marks of Awesomeness | Basic | 2 | 3 |
| John Hopkins Hospital | Pro | 2 | 0 |
| Teddy and the Wailers | Premium | 0 | 2 |
| Lawrence Movers | Basic | 0 | 0 |
【问题讨论】: