因此,让我先说一下,我不是一个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的系统中选择状态/评论。
答案 0 :(得分:12)
您可以使用简单连接在单个查询中获取所有内容,例如:
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
答案 1 :(得分:1)
SELECT d.name, p.name
FROM department d
JOIN people p ON p.department_id = d.id
我建议您还阅读SQL Join tutorial或三。这是一个非常常见且非常基本的SQL概念,您应该彻底了解它。
答案 2 :(得分:0)
这通常在一个查询中完成:
SELECT DepartmentTable.Name, People.Name from DepartmentTable
INNER JOIN People
ON DepartmentTable.id = People.department_id
ORDER BY DepartmentTable.Name
这将压制空部门。如果您想显示空白部门,请将INNER
更改为LEFT OUTER