SQLite JOIN 问题
SQLite JOIN trouble
我正在尝试通过在 SQLite 中设置一个简单的数据库来学习 SQL 的基础知识。
我创建了两个 table,“人员”和“部门”
人 table 有三列:ID(主键)、姓名和年龄;
部门table有两列:ID(主键)和DeptName;
一个人可以在多个部门工作,所以我创建了第三个 table“P2D”,其中有两列,“PpID”和“DpID”被限制在另外两个 tables。也许有更好的方法来做到这一点,但这是我想出来的(是吗?)
现在,我需要进行查询以显示人员姓名、年龄和部门。我做了这个:
SELECT Name 'Worker Name',
Age,
group_concat (DeptName,', ') Departments FROM People
LEFT JOIN P2D ON People.ID=P2D.PpID
LEFT JOIN Departments ON P2D.DpID=Departments.ID
GROUP BY Name;
这是输出:
Worker Name Age Departments
1 George Washington 30
2 Peter 24 Storage, Accountancy
3 Roger 21 Sales, Storage
4 Wilco 71 Burps and Farts
如您所见,George Washington 不在任何部门,因为我没有将他的 ID 放入 P2D table。
有没有办法显示一些东西,比如“空闲”而不是空白的 NULL 单元格?
谢谢,抱歉我的英语口吃。
您可以使用 COALESCE()
,因为 GROUP_CONCAT()
0 个结果的输出是 NULL
:
SELECT
Name 'Worker Name',
Age,
COALESCE(group_concat(DeptName, ', '), 'Idle') Departments
FROM People
COALESCE 输出第一个 non-null 个参数。
就个人而言,我宁愿在代码中而不是在数据库中执行此操作,因为 NULL
在 code/a 模板中完全可以检查。您可以打印“空闲”而不是 Departments
,或者显示一个图标,或者删除一个 link,等等。如果您总是 return 文本,您的代码不知道它是否表示部门名字,或者实际上没有部门。
您的 P2D
解决方案很常见而且很好。它是 link 或枢轴 table。
我正在尝试通过在 SQLite 中设置一个简单的数据库来学习 SQL 的基础知识。
我创建了两个 table,“人员”和“部门”
人 table 有三列:ID(主键)、姓名和年龄;
部门table有两列:ID(主键)和DeptName;
一个人可以在多个部门工作,所以我创建了第三个 table“P2D”,其中有两列,“PpID”和“DpID”被限制在另外两个 tables。也许有更好的方法来做到这一点,但这是我想出来的(是吗?)
现在,我需要进行查询以显示人员姓名、年龄和部门。我做了这个:
SELECT Name 'Worker Name',
Age,
group_concat (DeptName,', ') Departments FROM People
LEFT JOIN P2D ON People.ID=P2D.PpID
LEFT JOIN Departments ON P2D.DpID=Departments.ID
GROUP BY Name;
这是输出:
Worker Name Age Departments
1 George Washington 30
2 Peter 24 Storage, Accountancy
3 Roger 21 Sales, Storage
4 Wilco 71 Burps and Farts
如您所见,George Washington 不在任何部门,因为我没有将他的 ID 放入 P2D table。 有没有办法显示一些东西,比如“空闲”而不是空白的 NULL 单元格? 谢谢,抱歉我的英语口吃。
您可以使用 COALESCE()
,因为 GROUP_CONCAT()
0 个结果的输出是 NULL
:
SELECT
Name 'Worker Name',
Age,
COALESCE(group_concat(DeptName, ', '), 'Idle') Departments
FROM People
COALESCE 输出第一个 non-null 个参数。
就个人而言,我宁愿在代码中而不是在数据库中执行此操作,因为 NULL
在 code/a 模板中完全可以检查。您可以打印“空闲”而不是 Departments
,或者显示一个图标,或者删除一个 link,等等。如果您总是 return 文本,您的代码不知道它是否表示部门名字,或者实际上没有部门。
您的 P2D
解决方案很常见而且很好。它是 link 或枢轴 table。