因此,让我以任何方式说我都不是SQL向导来作为开头。我想做的是一个简单的概念,但是在尝试最小化我正在执行的数据库查询量时给我带来了一个小挑战。
假设我有一个部门表。每个部门内都有一个雇员列表。
列出所有部门以及每个部门中哪些雇员的最有效方法是什么?
因此,例如, 如果我有一个部门表:
id name 1 sales 2 marketing
和一个人表:
id department_id name 1 1 Tom 2 1 Bill 3 2 Jessica 4 1 Rachel 5 2 John
最好的方法是像这样列出所有部门和每个部门的所有员工:
营业额
营销学
假设两个表实际上都是巨大的。(我想避免获得部门列表,然后遍历结果并为每个部门进行单独查询)。当状态和注释存储在单独的表中时,类似于在类似Facebook的系统中选择状态/注释的思考。
您可以通过简单的连接在单个查询中获得所有信息,例如:
SELECT d.name AS 'department', p.name AS 'name' FROM department d LEFT JOIN people p ON p.department_id = d.id ORDER BY department
这将返回所有数据,但是使用起来有些麻烦,因为无论如何您都必须遍历每个人。您可以进一步将它们分组在一起:
SELECT d.name AS 'department', GROUP_CONCAT(p.name SEPARATOR ', ') AS 'name' FROM department d LEFT JOIN people p ON p.department_id = d.id GROUP BY department
您将获得如下内容:
department | name -----------|---------------- sales | Tom, Bill, Rachel marketing | Jessica, John