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。